我在 ngOnInit 中加載了一些需要在 ngAfterViewInit 內部訪問的資料。具體來說,Google Maps API,我從資料庫中加載 GPS 坐標,然后我需要在創建時將它們添加到地圖中。我在 ngAfterViewInit 中創建地圖本身。
我想我可以將整個事情移到 AfterViewInit,但我想我會問是否有一個好方法可以在使用 AfterViewInit 中的資料之前等待 ngOnInit 完成,以防我將來需要它用于其他專案。
ngOnInit() {
this.loadGpsCoordinates();
}
ngAfterViewInit() {
var elem = document.getElementById('map');
if (elem != null) {
this.map = new google.maps.Map(elem, {
center: { lat: -32.3881373, lng: 55.4343223 },
zoom: 17,
disableDefaultUI: true
});
// Now loop through GPSCoordinates to add Markers
// But wait! What if the coords aren't loaded yet?!
...
}
uj5u.com熱心網友回復:
我假設this.loadGpsCoordinates();回傳一個 Observable (如果不是,可以這樣做)
private coordinatesSubject = new ReplaySubject<any>(1)
ngOnInit() {
this.loadGpsCoordinates().pipe(
tap( data => this.coordinatesSubject.next(data))
).subscribe()
}
private ngAfterViewInit(data) {
this.coordinatesSubject().subscribe( data => {
// data would be use below
var elem = document.getElementById('map');
if (elem != null) {
this.map = new google.maps.Map(elem, {
center: { lat: -32.3881373, lng: 55.4343223 },
zoom: 17,
disableDefaultUI: true
});
}
})
}
注意:我沒有添加,takeUntil(destroyed$)但您可以單獨查找 - 它用于在洗掉組件時取消訂閱服務
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479660.html
標籤:有角度的
上一篇:如何將子組件顯示到模態框中?角
