ngrx-router-store
中的RouteSerializer
是否有可能返回Promise
或Observable
?
我真正想实现的是查找存储在商店中的一些链接元数据。但是,他们访问存储值的唯一方法是通过返回Observable
的this._store.select
。我在文档中没有看到任何允许这种返回类型的内容,所以在我尝试这种方法之前,请在这里发布。ngrx在任何情况下都拒绝与Observables
合作,这似乎很奇怪。。。
export class CustomSerializer implements RouterStateSerializer<RouterStateUrl> {
serialize(routerState: RouterStateSnapshot, private _store: IAppStore): RouterStateUrl {
let route = routerState.root;
while (route.firstChild) {
route = route.firstChild;
}
const {
url,
root: { queryParams },
} = routerState;
const { params } = route;
// Only return an object including the URL, params and query params
// instead of the entire snapshot
return this._store.select( state => state.navStore.links).pipe(
map( links => {
const l = links.find(l => l.id === 123);
return { url, params, queryParams, l };
})
);
}
}
只需订阅商店,并将链接作为成员变量进行维护:
export class CustomSerializer implements RouterStateSerializer<RouterStateUrl> {
links: string[] = [];
constructor(private store: IAppStore) {
this._store.select( state => state.navStore.links).subscribe(t => {
this.links = t;
});
}
serialize(routerState: RouterStateSnapshot, private _store: IAppStore): RouterStateUrl {
let route = routerState.root;
while (route.firstChild) {
route = route.firstChild;
}
const {
url,
root: { queryParams },
} = routerState;
const { params } = route;
// Only return an object including the URL, params and query params
// instead of the entire snapshot
const l = this.links.find(l => l.id === 123);
return { url, params, queryParams, l };
}
}