Ожидать асинхронную подписку, поскольку переменная будет создана - Angular - PullRequest
0 голосов
/ 31 октября 2018

У меня есть два компонента: 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...