Я использую google maps javascript api, и я должен отображать угловой компонент в InfoWindow.Angular2 - компонент, созданный динамическим элементом
В моем проекте я загружаю карту Google api с помощью службы Jsonp
. Чем у меня есть доступный объект google.maps.Map
. Позже в компоненте я создаю некоторые маркера и прикрепить к ним щелчок слушатель:
машинопись:
let marker = new google.maps.Marker(opts);
marker.setValues({placeId: item[0]});
marker.addListener('click', (ev: google.maps.MouseEvent) => this.onMarkerClick(marker, ev));
А потом в click
обработчике я хочу открыть информационное окно, которое содержит угловой компонент:
машинопись:
private onMarkerClick(marker: google.maps.Marker, ev: google.maps.MouseEvent) {
var div = document.createElement();
this.placeInfoWindow.setContent(div);
// Magic should happen here somehow
// this.placeInfoWindow.setContent('<app-info-view-element></app-info-view-element>');
this.placeInfoWindow.open(this.map, marker);
}
То, что я в конечном итоге делаю некоторую ваниль JS:
машинописи:
private onMarkerClick(marker: google.maps.Marker, ev: google.maps.MouseEvent) {
let div = document.createElement('div');
div.className = 'map-info-window-container';
div.style.height = '140px';
div.style.width = '240px';
this.placeInfoWindow.setContent(div);
this.placeInfoWindow.open(this.map, marker);
this.placesService.getPlace(marker.get('id')).subscribe(res => {
this.decorateInfoWindow(div, res.name, marker);
}, error => {
this.decorateInfoWindow(div, ':(Failed to load details: ', marker);
});
}
private decorateInfoWindow(containerEl: HTMLElement, title?:string, marker?:google.maps.Marker) {
let h3 = document.createElement('h3');
h3.innerText = title;
containerEl.appendChild(h3);
let buttonBar = document.createElement('div');
let editButton = document.createElement('button')
editButton.innerText = "Edit";
editButton.addEventListener('click', ev => {
this.editPlace(marker);
});
buttonBar.appendChild(editButton);
containerEl.appendChild(buttonBar);
}
Проблема, как я узнал, это то, что единственный жизнеспособный способ для создания динамических компонентов заключается в использовании углов главного ViewContainerRef
:
Но нет никаких документов или примеров, описывающих, как создать ViewContainerRef
из динамически созданного элемента.
Можно ли каким-либо образом заставить инфраструктуру обрабатывать DOM? Как указано во многих потоках: «Угловой не обрабатывается innerHTML
или appendChild
». Это полный тупик?
Второе: возможно ли использование Renderer
? (Не знакомый с этим), я видел это Canvas Renderer Experiment и теоретически, я думаю, он будет работать и с картой Google, так как мы можем экстраполировать, что карта - это просто особый вид холста. Доступна ли она в последней версии или она изменилась? DomRenderer
не находится в документах, однако их можно найти в источниках.
Да, это помогает много, спасибо! –
Рад слышать :) – yurzui
Обнаружение изменений не работает для меня – Jigar