Как правильно передать результат из Observable в сервис? - PullRequest
0 голосов
/ 18 января 2020

Мне нужно передать данные в мой модал. Но данные взяты из API, поэтому мне нужно сначала получить их.

OpenModal(): void {
    let teams;
    this.teams$.subscribe(result => teams = result);

    const modal = this.modalService.showDialog({
        userId: this.userId,
        teams: teams
    });

    // Listen to Close Modal event
    modal.close.subscribe((result) => {
        if (result) {
            this.doSomething();
        }
    });
}

Это работает нормально, но я чувствую, что у меня не получается.

Сначала я вынул данные из потока teams$ и присвоил их переменной. Я думаю, что это неправильно, но я не могу понять, как сделать его полностью реактивным без вложенных подписок, как показано ниже:

OpenModal(): void {
    this.teams$.subscribe(teams => {
        const modal = this.modalService.showDialog({
            userId: this.userId,
            teams: teams
        });

        // Listen to Close Modal event
        modal.close.subscribe((result) => {
            if (result) {
                this.doSomething();
            }
        });
    });
}

Есть идеи, как мне сделать это лучше?

1 Ответ

0 голосов
/ 19 января 2020

Я нашел очень простое решение, но почему я не придумал это раньше

OpenModal(): void {
 this.teams$.pipe(
    map(teams => {
       return this.modalService.showDialog({
        userId: this.userId,
        teams: teams
       });
    }),
    switchMap(modal => modal.close)        
    )
    .subscribe((result) => {
        if (result) {
            this.doSomething();
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...