Reputation: 1
We are switching from google maps to OSM using Leaflet and ngx-leaflet. The issue is we have many templates that use the map-info-window component of google maps, which displays custom popups. I have the leaflet in it's own component in which each component that has a map calls it, passing an array of markers objects containing locations and other info for each marker, I'm passing the popup as a string of HTML. When you click on the marker it is blank. I can use regular html and it works as expected. Is there something I need to do to the HTML to render it as custom components?
(old component) map-google-container.html
<map-info-window>
<div class="project-info" *ngFor="let item of group">
<app-chart-map-popup [item]="item"></app-chart-map-popup>
<app-view-popup [item]="item" [isOpen]="i === infoIdx"></app-view-popup>
</div>
</map-info-window>
(new component) map-osm-container.html
<app-map [locations]="locationGroupedItems"></app-map>
map-osm-container.component.ts
...
private createMarkerInfo (locations){
return locations.map(loc => {
loc[0].info = '<div class="project-info" *ngFor="let item of group">
<app-chart-map-popup [item]="item"></app-chart-map-popup>
<app-view-popup [item]="item" [isOpen]="i === infoIdx"></app-view-popup>
</div>';
return loc;
});
}
map.component.ts
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class MapComponent implements OnChanges {
@Input() locations: any[];
...
configureMap(map){
setTimeout(() => {
this.locations.forEach(loc => {
const myMarker = L.marker([loc[0].latitude,loc[0].longitude], markerOptions);
myMarker.bindPopup(loc[0].info);
this.markers.addLayer(myMarker);
}
map.addLayer(this.markers);
});
}, 0);
}
}
I have tried passing in the HTML string but it doesn't render. What should I do to render the Angular components?
Upvotes: 0
Views: 41