美好的一天, 我有这个疯狂的想法使用服务作为缓存存储。所以我在Service中定义了一些变量。数据在服务中更新,但更改未在视图中反映。 View已经填充,服务层随后运行。我不确定,即使将数据存储在服务中也是个好主意?有人可以说清楚它。 这是我的服务代码:
categories : SelectItem[]=[];
constructor(private utilityService:UtilityService) {
}
//populate all drop downs array with initial data from db
populateAll() {
//get categories
this.getCategories();
//there are lot more calls here
}
private getCategories() {
if(this.categories.length==0){
this.utilityService.getAllCategories().subscribe(cat=>{
this.categories =
this.utilityService.getSelectItemPublished(cat,"Category");
})
}
}
这就是我在组件中调用它的方式
constructor(
private cache:CacheStoreService,
) { }
ngAfterViewInit()
{
this.categories=this.cache.categories;
this.depts=this.cache.depts;
this.focuses=this.cache.depts;
this.statuses=this.cache.statuses;
this.phases=this.cache.statuses;
this.visibilities=this.cache.visibilities;
}
ngOnInit() {
this.cache.populateAll();
感谢您的帮助。还有一个问题:当在db-update缓存中添加新数据时,如何更新服务变量。 **我知道,我可以返回observable并在组件中订阅它。我正在寻找另一种方式。不确定,如果能做到的话? **
谢谢
答案 0 :(得分:4)
以下是发生的事情:
this.cache.populateAll()
有几种方法可以解决这个问题。
第一种方法是避免用另一个替换数组,而是填充原始数组。
第二种方法是始终从服务请求数组,而不是在组件中存储第二个引用:
get categories() {
return this.cache.categories;
}
第三种方法是从服务中的一个observable发出一个事件,该组件将订阅以获得新的类别。