这是我面临的问题。
我在分配给指令的组件中有一个变量。我正在使用 ngrx 来调度和订阅事件。所以问题是变量第一次没有更新。之后就没有问题了。
我有一个谷歌地图和图标,点击任何图标时,它会使用 id 和地图边界调用服务器,然后使用返回的数据调度一个动作。
private getFromServer(id, bound_corners){
let params = { bounds: bound_corners }
return this.restangular.all('get-data/'+id)
.customGET("", params)
.map((d:any)=>{
return d.plain();
});
}
public onClick(icon){
let bound_corners = this.getMapBounds();
this.getFromServer(icon.id, bound_corners).subscribe((d)=>{
this.store.dispatch(new action.detail(d, id));
});
}
在组件类中
let temp = store.select(fromRoot.getIconDetail);
temp.subscribe((d)=>{
this.data = d;
})
在组件中 this.data 不会第一次更新。如果我控制台 log(this.data) 那么它可以工作,但它不会在 html 中更新。
如果我像这样从 getFromServer 订阅中取出调度操作:
public onClick(icon){
let bound_corners = this.getMapBounds();
let temp_data = {name:"test","id":0};
this.store.dispatch(new action.detail(temp_data, id));
}
然后它工作。
目前我有一个使用 ChangeDetectorRef 的解决方案。
constructor(private chRef: ChangeDetectorRef){
let temp = store.select(fromRoot.getIconDetail);
temp.subscribe((d)=>{
this.data = d;
this.chRef.detectChanges();
});
}
我不确定这是否是正确的方法,但我无法弄清楚发生了什么或任何其他解决方案。
任何帮助将不胜感激。谢谢