Как использовать решимость с магазином - PullRequest
0 голосов
/ 24 июня 2018

Я использую метод resol интерфейса Routes для разрешения данных маршрутов из Store (ngrx), возвращая наблюдаемый редуктор в методе canUse интерфейса Resolve.Однако, в отличие от возвращаемых Observables метода http HtppClient, возвращаемое Store значение Observable, похоже, не работает так же.

У меня есть класс распознавателя ResolveFromStore , который выглядит следующим образом:

@Injectable()
export class ResolveFromStore implements Resolve<Observable<any>> {
observable:Observable<any>
constructor(
    private _store:Store<any>
) {
    // the reducer
    this.observable = this._store.select(from_store_index.getLanguage);
}
    resolve(route: ActivatedRouteSnapshot) {
              return this.observable;  
    }
}

и в моем маршрутизаторе Я включил его так:

 const routes: Routes = [{
    path: '',
    component: PostPaidPageComponent,
    children: [
        {
            path: 'treatment',
            component: TreatmentPostpaidComponent,
            resolve: {
                fromStore: resolvers.ResolveFromStore 
            }
        }...

Как бы то ни было, это не работает с подпиской на магазин, в отличие от подписки на http, которая разрешается нормально.Я возвращаю наблюдаемое в функции разрешения , так что может быть не так.

1 Ответ

0 голосов
/ 24 июня 2018

Я не думаю, что использование резольвера здесь подходит.

Когда вы передаете наблюдаемое в функцию разрешения, оно будет ждать, пока это наблюдаемое завершится, ДО того, как вы отпустите запрошенный маршрут.

Одно простое исправление, но с огромным ограничением ... Это использование first или take(1) на вашей наблюдаемой. Но, конечно, после этого вы получите значение только один раз.

Я задал целый вопрос, спрашивая, почему распознаватель будет полезен из-за этого: Зачем вам использовать преобразователь с Angular

...