【发布时间】:2018-06-20 21:45:14
【问题描述】:
我有一个带有路由 /home 的父组件,其中包含一个列表,当单击列表项时,我导航到 /home/edit/listid 并更新数据库。数据库更新后,我将导航回 /home。但是在我手动刷新页面之前,列表不会更新。 我也尝试在更新数据库后调用 dataservice.getList() ,但没有运气。 下面是我的代码。有人可以帮我确定我缺少什么吗?
主页组件
ngOnInit() {
this.loadList();
}
loadList() {
this.dataservice.getList().subscribe(
res => {
this.List= res;
},
err => {
console.log('Error Occoured');
console.log(err);
}
);
}
数据服务 getList()
getList(): Observable<any[]> {
return this.http.post<any[]>('https://resturl/Prod/getdata', {
'operation': 'getData'
}
});
}
编辑列表
this.dataservice.updateList().subscribe(
updateAccRes => {
this.dataservice.getList();
this.router.navigate(['/home']);
}
},
error2 => {
console.log(error2);
}
);
【问题讨论】:
-
我看不出这里有什么问题。在路由返回时应该调用
ngOnInit(确保调用了getList()方法)。但我想知道为什么你从你的 API 中获取列表,post -
可能您在服务完成之前导航到 /home 并且您没有任何机制来更新父组件。 (您的新数据已获取但从未传递给父组件尝试使用 Subject/BehaviorSubject 与 b/w 组件/服务进行通信,并在获取列表后重定向到主页。
-
这不可能是原因。他不必在编辑列表组件中调用
getList(),因为他没有订阅它。所以它什么也没做。当他在updateList的订阅中路由回到家时(调用完成),他应该路由回到家并且应该在 Home 组件的ngOnInit中调用getList。他在这里更新列表
标签: angular components refresh