如何在商店中使用解析

时间:2018-06-24 08:06:43

标签: angular angular5 ngrx angular6 ngrx-store

我正在使用 Routes 界面的 resolve 方法,通过返回来解析 Store (ngrx)中的路由数据在Resolve界面的canUse方法中> reducer observable 。但是,与HtppClient的http方法的返回的Observables不同,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订阅不同,它可以很好地解决问题。
在resolve函数中返回一个可观察值,所以可能出了问题。

1 个答案:

答案 0 :(得分:2)

我不认为在这里使用解析器很合适。

当您将一个可观察对象传递给resolve函数时,它将等待该可观察对象完成,然后再让您进入请求的路线。

一个简单的解决方法,但是有很大的限制...是在您的观察对象上使用firsttake(1)。但是,当然,此后您将只获得一次该值。

我已经提出了一个完整的问题,为什么解析器会因此而有用:Why would you use a resolver with Angular