由于我们有相当大的 Angular 1.x 应用程序,我们无法将其完全升级到 Angular 2,但我喜欢新的架构。 1.5版本带来惊喜component
转到旧的相同应用程序。和所有很酷的东西一样,它缺乏文档;-)
所以,有一个问题。我在 Controller 的定义中有这两行:
this.$onInit = setType;
this.$onChanges = setType;
第一个有效,而第二个无效。我正在使用'<'
捆绑。因此,在第一次加载时,组件的状态是根据传递的值设置的,而更改不会被反射(reflect)。我希望它能够从 [1] 和 [2] 中发挥作用。
[1] https://docs.angularjs.org/guide/component
[2] https://angular.io/docs/js/latest/api/core/OnChanges-interface.html
UPD 好吧,我知道它不应该起作用: https://github.com/angular/angular.js/issues/14030
有人知道好的解决方法吗?
UPD2从 1.5.3 开始运行
最佳答案
从 AngularJs 1.5.3 开始,假设 ctrl.someModel 在子组件中单向绑定(bind),则以下内容不会触发 $onChanges。
function get() {
api.getData().then( (data) => {
ctrl.someModel.data = data
}
}
似乎更新对象的属性不会被识别为更新。
这就是我目前解决这个问题的方法。我不认为这是最好的解决方案,但它会触发 $onChanges。我创建初始模型的深拷贝,将数据添加为其属性之一,然后将初始模型设置为新对象的值。本质上,我更新了整个对象,该对象由生命周期 Hook 拾取:
function get() {
api.getData().then( (data='42') => {
const updatedModel = angular.copy(ctrl.someModel)
updatedModel.data = data
ctrl.someModel = updatedModel
}
}
在子组件中(假设模型已绑定(bind)为“数据”):
this.$onInit = function(bindings) {
if (bindings.data && bindings.data.currentValue) {
console.log(bindings.data.currentValue) // '42'
}
}
关于javascript - Angular 1.5 组件 onChanges 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604919/