Angular 6 Leaflet: получить карту в сервисе - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно получить карту в свой сервис в приложении Angular 6.В настоящее время я получаю это через аргумент, когда я вызываю функцию init в сервисе и предоставляю его через Subject из компонента после получения данных из хранилища.Но иногда я получаю undefined вместо карты.

Мой пример кода:

page.component.ts

export class PageComponent implements OnInit {

    map$ = new Subject<Map>();

    ngOnInit() {
        this.store.pipe(
            select(fromStore.getData)
        )
        .subscribe(data => {
            this.mapService.doSomething(this.map$);
        })
    }

    mapReady(map: Map) {
        this.map$.next(map);
    }
}

map.service.ts

export class MapService {
    map: Map;
    subsription$: Subscription;

    doSomething(map$: Observable<Map>) {
        this.subsription$ = map$.subscribe(data => {
            this.map = data;
        })
    }
}

Есть ли другой способ получить карту в сервис?

1 Ответ

0 голосов
/ 26 февраля 2019

Есть ли причина, по которой вы не можете просто получить более прямой доступ к карте?Похоже, у вас есть несколько дополнительных слоев косвенности, которые вам могут не понадобиться.Примерно так:

map.service.ts:

export class MapService {
    map: Map = new Map();

    doSomething(map: Map) {
        this.map = map;
    }
}

page.component.ts:

export class PageComponent implements OnInit {

    ngOnInit() {
        this.store.pipe(
            select(fromStore.getData)
        )
        .subscribe(data => {
            this.mapService.doSomething(data);
        })
    }

    mapReady(map: Map) {
        this.mapService.doSomething(map);
    }
}

Точные типы могут быть не совсем верными, так как яЯ не уверен, что делают this.store и fromStore, но это должно быть достаточно просто, чтобы соответствовать, как все работает на самом деле.

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