我的服务中有以下结构:
getAsync(){
var updateStream = this._http.get('someApi')
.map(
res=>{
var success = res.json();
///some logic on success
return success;
})
.catch(
error=>{
return Observable.throw(error)
});
return updateStream;
}
在我的组件中,我有:
Service.getAsync().subscribe(success=>{
Object.assign(this.myArray,success)
})
其中myArray定义为:
public myArray:any[] = [];
意思是,它是在构造函数中初始化的。
现在,在我看来,我有:
{{myArray | json}}
保持这样:
[]
。
我已经检查了控制台日志和间隔,this.myArray
确实发生了变化,组件中的值也发生了变化。
我在哪里弄错了?
更新
这是plnkr
答案 0 :(得分:1)
只有在为属性分配了另一个数组时,才会在修改数组时更新视图。
如果您更改了该行(缺少将结果分配给this.myArr
的部分)
Object.assign(this.myArr,success)
到
this.myArr = success; //Object.assign(this.myArr,success)
它会更新视图。
如果视图绑定到数组中项目的属性,那么*ngFor
会识别同一数组中的更改但只有{{myArr | json}}
Angular不会识别更改,因为{{1} 1}}管道是纯粹的,因此在json
发生变化之前,Angular不会调用它。
如果您使用
myArr
然后Angular也会检测同一阵列中的变化。