【问题标题】:How can i use pass data from one resolver to other我如何使用将数据从一个解析器传递到另一个解析器
【发布时间】:2017-12-11 10:48:45
【问题描述】:

我有 2 个角解析器一个接一个地工作。第一个

@Injectable()
export class ChainViewResolver implements Resolve<any> {

    constructor(private a: AService) {
    }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
        return this.a.getSome(route.params['id']);
    }
}

其次,

@Injectable()
export class DocViewResolver implements Resolve<any> {

    constructor(private a: AService) {
    }

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {

    return this.a.getSome(state.url.split('/')[state.url.split('/').indexOf('id') + 1]).flatMap((chain) => {
        return this.a.getSomeAnotherData(route.params['id2']).flatMap(result => {

        });
    });
}
}

网址看起来像:

/parent_component/:id/children_component/:id

父组件的第一个解析器和子组件的第二个解析器

1) 方法 getSome 它的请求很重,当我的解析器一起工作时,我不想使用它 2 次。

2) 我不想将它写入某个变量或本地存储,因为 getSome 返回的数据经常发生变化,当我使用第一个解析器时,我可能会因此遇到问题

如何将我的数据从第一个解析器传递到第二个解析器?

【问题讨论】:

    标签: angular angular-routing resolver


    【解决方案1】:

    如果您有第一个父路由的声明,例如:

    resolve: {
        parentValue: ChainViewResolver
    }
    

    您可以在子 DocViewResolver 中获得它,例如:

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
    
        let parentValue = route.parent.data.parentValue; // <-- here
    
        return ...
    }
    

    【讨论】:

      【解决方案2】:

      结果我使用名为 TmpService 的服务将数据从一个解析器传递到另一个解析器,它可以工作,但我不喜欢这个决定。

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 2020-08-02
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多