0

有什么方法可以让RouteSerializerinngrx-router-store返回 aPromise或 anObservable吗?

我真正想要实现的是查找存储在商店中的一些链接元数据。但是,他们访问存储值的唯一方法是通过this._store.selectwhich 返回一个Observable. 我在文档中看不到任何允许此返回类型的内容,因此在我开始使用这种方法并尝试不同的方法之前,请在此处发布。ngrxObservables在任何情况下都拒绝与之合作,这似乎很奇怪......

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 };
            })
        );
    }
}
4

1 回答 1

0

只需订阅商店,并将链接维护为成员变量:

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 };
            
        
    }
}
于 2020-11-19T08:02:14.510 回答