如何在 Store 中使用 resolve
How to use resolve with Store
我正在使用 Routes 接口的 resolve 方法来解析来自 Store[= 的路由数据28=] (ngrx) 通过在 Resolve 接口的 canUse 方法中返回一个 reducer observable。然而,与 HtppClient 的 http 方法返回的 Observable 不同,Store 返回的 Observable 的工作方式似乎不同。
我有一个名为 ResolveFromStore 的解析器 class,它看起来像这样:
@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 函数中返回一个可观察对象,所以可能出了什么问题。
我认为使用解析器不适合这里。
当您将一个 observable 传递给 resolve 函数时,它会等待该 observable 完成,然后再让您走请求的路线。
一个简单的解决方法,但有很大的限制...是在您的可观察对象上使用 first
或 take(1)
。但是当然,在那之后你只会得到一次价值。
我提出了一个完整的问题,询问为什么解析器会因此有用:Why would you use a resolver with Angular
我正在使用 Routes 接口的 resolve 方法来解析来自 Store[= 的路由数据28=] (ngrx) 通过在 Resolve 接口的 canUse 方法中返回一个 reducer observable。然而,与 HtppClient 的 http 方法返回的 Observable 不同,Store 返回的 Observable 的工作方式似乎不同。
我有一个名为 ResolveFromStore 的解析器 class,它看起来像这样:
@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 函数中返回一个可观察对象,所以可能出了什么问题。
我认为使用解析器不适合这里。
当您将一个 observable 传递给 resolve 函数时,它会等待该 observable 完成,然后再让您走请求的路线。
一个简单的解决方法,但有很大的限制...是在您的可观察对象上使用 first
或 take(1)
。但是当然,在那之后你只会得到一次价值。
我提出了一个完整的问题,询问为什么解析器会因此有用:Why would you use a resolver with Angular