1

我的情况

我有一个app.module引导程序 app.component

和路由器 base href = '/'

加载我的 home.component

我有方法 onInit() 在哪里我使用RiotService从 api 获取数据

this.riot.Summoner.byName(this.summoner, this.region);

所以我可以这样做

this.riot.Summoner.byName(this.summoner, this.region).then(()=> {
   //do something with data
   //this.riot.Summoner.info
});

下一步

我有我的 summoner.component,它有自己的路线“/summonerName/etc” ,我需要使用从父组件(home.component)检索到的数据

没关系,我先去'/',然后去'/summonerName/etc'使用[routerLink]例如

但是当我直接转到'/summonerName/etc'或刷新页面时

我的 home.component 开始从我的数据中检索数据RiotServive,当我尝试获取数据时,我this.riot.Summoner.info得到了渲染。undefinedsummoner.component

我知道这一切是因为我的承诺比子组件渲染解决的时间长一点。

所以我有一个问题。

如何在我的父控制器解析数据之前阻止我的子组件呈现

这是我的 RiotService

request<T>(url:string, errorHandler?: (error: any) => Promise<any>){
    return this.http.get(url)
        .toPromise()
        .then(response => response.json() as T)
        .catch(errorHandler || this.handleError);
}
byName(summonerName:string, region:string){
    return this.request<ISummoner>(
            `some url to get data`)
        .then((response) => {
            this.info = response as ISummoner
        })
}
4

1 回答 1

-1

只需使用Resolvers,它将确保在实际激活路线之前加载数据。

下面的文章通过一步一步的例子来解释这个想法

https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html

于 2017-01-19T14:06:53.537 回答