首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否在RouteSerializer中返回可操作/访问存储值?

是否在RouteSerializer中返回可操作/访问存储值?
EN

Stack Overflow用户
提问于 2020-11-19 01:24:28
回答 1查看 17关注 0票数 0

ngrx-router-store中的RouteSerializer是否可以返回PromiseObservable

我真正想实现的是查找存储在存储库中的一些链接元数据。但是,它们访问存储值的唯一方法是通过返回Observablethis._store.select。我在文档中没有看到任何允许这种返回类型的东西,所以在我尝试这种方法并尝试不同的方法之前,请在这里发布。奇怪的是,ngrx在任何情况下都会拒绝与Observables合作……

代码语言:javascript
复制
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 };
            })
        );
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-19 16:02:15

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

代码语言:javascript
复制
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 };
            
        
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64898137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档