У меня есть два компонента: map.component и choose-координировать.component . Они оба братья и сестры, и они находятся в папке компонентов. У меня также есть сервис, который связывается между компонентами.
В выбрать-координаты.ts в методе ngOnInit, я получаю координаты из своей формы и отправляю эти координаты на карту компонентов, используя сервис.
выбрать-coordinates.component.ts
ngOnInit() {
const cords: Array<number> = [this.pointForm.get('X_WGS84').value, this.pointForm.get('Y_WGS84').value];
this.mapService.setChangeCords(cords);
}
map.service.ts
getChangeCords(): Observable<Array<number>> {
return this.changeCords.asObservable();
}
setChangeCords(cords) {
this.changeCords.next(cords);
}
В map.component.ts Я собираю эти координаты и вызываю метод setView для элемента map .
map.component.ts
this.mapService.getChangeCords().subscribe((cords: Array<number>) => {
this.map.setView(latLng([cords[0], cords[1]]), 19);
});
Но в тот момент, когда я хочу вызвать метод setView()
, this.map === undefined
, я не могу вызвать метод setView()
.
ОШИБКА TypeError: Невозможно прочитать свойство 'setView' из неопределенного
Переменная this.map
инициализируется в onMapReady()
методе:
onMapReady(map: Map) {
this.map = map;
}
И этот метод находится в map.component.html (я использую ngx-leaflet)
<div
leaflet
[leafletLayers]="layers"
(leafletMapReady)="onMapReady($event)"
[leafletOptions]="options">
</div>
Я хочу знать, возможно ли остановить подписку, пока не будет создана переменная this.map. Я представляю это примерно так:
this.mapService.getChangeCords().subscribe((cords: Array<number>) => {
if(this.map !== undefined){
this.map.setView(latLng([cords[0], cords[1]]), 19);
}
});
Или, может быть, можно инициализировать компонент выбрать-координаты.component в качестве последнего компонента - после map.component .
Поскольку я хочу, чтобы элемент this.map был определен до того, как я вызову для него метод setView()
.