如何在 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 完成,然后再让您走请求的路线。

一个简单的解决方法,但有很大的限制...是在您的可观察对象上使用 firsttake(1)。但是当然,在那之后你只会得到一次价值。

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