Я использую карты Esri внутри приложения Angular и отображаю мои всплывающие окна как компоненты Angular с данными, опубликованными методом PopupTemplate
content
:
layer.popupTemplate = new PopupTemplate({
content: (feature: { graphic: __esri.Graphic }) => {
this.publishPopupData(layer, feature.graphic.attributes);
return popupComponent.viewContainerRef.element.nativeElement;
},
// other properties...
});
Это хорошо работает,за исключением случая, когда есть несколько функций в данной точке.Когда пользователь переключается между функциями, если он / она возвращается к функции, которая уже была отображена, метод содержимого не выполняется, поэтому всплывающие данные не публикуются.
Я могу получить доступ к выбранной в данный момент функции ввсплывающее окно MapView
, но мне нужно знать, из какого слоя пришел объект, чтобы правильно опубликовать данные (каждый слой предъявляет уникальные требования для обработки данных ArcGIS в моделях, используемых всплывающими окнами).
mapView.popup.watch('selectedFeature', (graphic: __esri.Graphic) => {
const layer = ???;
this.publishPopupData(layer, graphic.attributes);
});
Номинально, graphic.layer
должен содержать ссылку на слой, но в моем случае это всегда null
.
Есть ли способ заставить всплывающие окна всегда вызывать метод содержимого, даже еслиэто уже было выполнено для данной функции?В качестве альтернативы, есть ли способ получить слой, которому принадлежит элемент, из MapView.popup
(или что-то еще, что я не учел)?
Если это имеет значение, всплывающие окна предназначены для MapImageLayer
подслоев.