我正在使用 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函数中返回一个可观察值,所以可能出了问题。
答案 0 :(得分:2)
我不认为在这里使用解析器很合适。
当您将一个可观察对象传递给resolve函数时,它将等待该可观察对象完成,然后再让您进入请求的路线。
一个简单的解决方法,但是有很大的限制...是在您的观察对象上使用first
或take(1)
。但是,当然,此后您将只获得一次该值。
我已经提出了一个完整的问题,为什么解析器会因此而有用:Why would you use a resolver with Angular