我如何使用从一个解析器传递数据到其他

时间:2017-07-07 08:06:15

标签: angular angular-routing resolver

我有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 => {

        });
    });
}
}

url看起来像:

/ parent_component /:ID / children_component /:ID

其中,parent_component的第一个解析器和children_component的第二个解析器

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

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

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

2 个答案:

答案 0 :(得分:3)

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

resolve: {
    parentValue: ChainViewResolver
}

你可以在子DocViewResolver中得到它,如:

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

    let parentValue = route.parent.data.parentValue; // <-- here

    return ...
}

答案 1 :(得分:0)

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