我已经设置了plunk
我正在单击按钮和单击时更改对象的 bool 属性ngOnchange
应该触发但没有发生。为什么?。是否与父组件和子组件之间共享相同的对象引用有关?
角度变化检测仅检查对象身份。
如果修改对象的内容,Angular 将无法识别。
如果你有一个到对象属性或数组项的绑定,Angular 会检查绑定思想,但是ngOnChanges
仍然不会被调用。
这种设计的原因是性能。如果 Angular 需要进行深度对象比较,则更改检测将成为更大的性能负担。
解决方法是复制对象或数组,以创建具有不同对象 ID 的新对象。角度变化检测会将其识别为变化并更新到子组件的绑定。
this.data.status = !this.data.status
this.data = Object.assign({}, this.data);
或对于数组
this.data = this.data.slice();
笨蛋的例子
其他方式正在实施DoCheck
在子组件中并自己进行比较,而不是依赖于更改检测。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)