我正在使用 AGM(Angular Google Maps),我想创建一组我自己的自定义组件,这些组件包装 AGM 组件以允许在我的应用程序中进行高度重用。
但是,当我这样做时,标记(在此示例中)似乎没有在地图上呈现,但我没有收到任何错误。我想知道这是否与嵌套组件有关<ng-content>
任何人都可以帮忙吗?我有一个stackblitz设置。请参阅底部的更新,了解使用Slot.
TLDR:当我嵌套自定义组件时,它会创建一个似乎破坏功能的ng-contentHTML 元素中间人。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 问题还是 Angular 问题?这有关系ng-content吗?有办法解决吗?
更新 根据@Anytoe 的评论,这里是我的用例:
<v-map>
<v-map-plots [plots]="displayPlots"></v-map-plots>
</v-map>
我的想法是我可以制作许多可重用的地图组件,然后我可以在需要时在整个应用程序中重用它们。
更新 2我读到了 Slot 并认为这可以帮助我,所以为 Angular 7 设置了一个新的 Stackblitz并使用了 slot,但也无法让它工作