Скорее всего, здесь происходит то, что вы добавляете слой VectorGrid в Angular Zone, что означает, что Angular собирается подключить все обнаруженные обратные вызовы к событиям.По сути, вы правы в том, что все события мыши являются спамом при обнаружении изменений Angular.
Если вы посмотрите в основную директиву ngx-leaflet, вы увидите, как карта создается за пределами угловой зоны.Вы хотите сделать что-то подобное (я не проверял это, но это должно быть правильной базовой идеей):
constructor(private zone: NgZone) {}
...
onMapReady(map: any) {
// noinspection JSUnusedGlobalSymbols
const vectorTileOptions = {
vectorTileLayerStyles: {
"cities-point": (p: any) => this.stylingFunction(p)
},
interactive: true
};
// Create outside of angular so the events don't trigger change detection
this.zone.runOutsideAngular(() => {
L.vectorGrid.protobuf(
"http://localhost:9999/maps/batimap/{z}/{x}/{y}.vector.pbf",
vectorTileOptions
).addTo(map);
});
}
Единственный трюк в том, что вам придется вручную вызывать обнаружение изменений, когда выочень хочу, чтобы Angular заметил изменение, внесенное вами в обработчик, зарегистрированный для одного из этих событий.Но это довольно стандартная практика, когда вы упаковываете неангулярные библиотеки, подобные этой.Это единственный способ заставить вещи работать эффективно, когда вы хотите, чтобы работала автоматическая привязка данных.