我的情况
我有一个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
得到了渲染。undefined
summoner.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
})
}