Я использую AGM (Angular Google Maps) и хочу создать набор своих собственных пользовательских компонентов, которые обертывают компоненты AGM для обеспечения возможности повторного использования в моем приложении.
Однако, когда я делаю это, маркеры (в этом примере) не отображаются на карте, но я не получаю ошибок. Интересно, это как-то связано с вложением компонентов в <ng-content>
Кто-нибудь может помочь? У меня есть stackblitz настройки. Пожалуйста, смотрите обновления внизу для Angular 7 Stackblitz, используя Slot
.
TLDR: Когда у меня есть вложенные пользовательские компоненты, он создает посредника HTML-элемента ng-content
, который, кажется, нарушает функциональность agm
.
Мой основной компонент - vmap
@Component({
selector: "v-map",
template: `<agm-map flex [latitude]="lat" [longitude]="lng">
<ng-content></ng-content>
<!--agm-marker [latitude]="lat" [longitude]="lng"></agm-marker-->
</agm-map>`
})
export class VMapComponent {
lat: number = 51.678418;
lng: number = 7.809007;
constructor(private loader: MapsAPILoader) {
}
}
Обратите внимание, что если я прокомментирую agm-marker
в шаблоне, он будет отображаться. Кажется, он не работает только в пределах ng-content
.
Вот субкомпонент v-map-plots
@Component({
selector: "v-map-plots",
template: `<agm-marker *ngFor="let plot of plots" [latitude]="plot.Latitude" [longitude]="plot.Longitude"></agm-marker>`
})
export class VMapPlotsComponent {
@Input() plots: IPlot[] = [];
constructor(@Host() private parent: VMapComponent) {
this.plots.push({ Latitude: 51.678418, Longitude: 7.809007 })
}
}
Это проблема AGM или угловая проблема?
Это связано с ng-content
?
Есть ли способ обойти это?
Обновление
Согласно комментарию @ Anytoe, вот мой вариант использования:
<v-map>
<v-map-plots [plots]="displayPlots"></v-map-plots>
</v-map>
Идея заключается в том, что я могу создать несколько повторно используемых компонентов карт, которые затем можно будет повторно использовать в своем приложении, где это необходимо.
Обновление 2 Я читал о слоте и подумал, что это может мне помочь, поэтому настроил новый Stackblitz для Angular 7 и использовал слот, но также не смог заставить это работать