【发布时间】:2018-04-04 18:20:20
【问题描述】:
我有一个共享服务如下:
data = new BehaviorSubject<any[]>([]);
constructor(userService: UserService){
if (localStorage.getItem('data') === null) {
userService.getAllData().subscribe(results =>
this.data.next(results)
}
else {
this.loadData()
}
}
loadData() {
let data = JSON.parse(localStorage.getItem('data');
this.data.next(data);
}
setData(data) {
localStorage.setItem('data', JSON.stringify(data))
this.data.next(data)
}
然后在我的组件上 ngOnInit() 我有:
ngOnInit() {
this.sharedService.data.subscribe(results =>
this.allData = results;
)
}
itemChange() {
this.allData.slice(index, 5);
this.sharedService.data.next(this.allData)
}
我有 OnLogout :
localStorage.removeItem('data')
问题是在第一页重新加载时,服务被调用并且我得到了预期的数据,我进行了更改,然后在我注销后重新登录,
在存储上我没有数据键了,但是 sharedService 没有被再次调用,而是在组件 onInit 上 this.sharedService.data 已经从上次填充。
如何让它每次都调用 sharedService 以便它检查 item('data') 是否存在,就像它在服务构造函数上一样?
【问题讨论】:
-
@ShashankVivek 如果我使用主题,我将无法订阅组件?那我该怎么做呢?因为它确实有效,但是当我注销并重新登录时,onngOnInit 已经填充了来自共享服务的数据。我需要刷新页面,以便它再次调用服务,然后查看并检查它在构造函数上的条件。