Angular 1.5 组件 onChanges 不工作

新手上路,请多包涵

由于我们有相当大的 Angular 1.x 应用程序,我们无法将其完全升级到 Angular 2,但我喜欢新架构。版本 1.5 为旧的同一个应用程序带来了惊人的 component s。作为所有很酷的东西,它缺少文档 ;-)

所以,这是一个问题。我在控制器的定义中有这两行:

 this.$onInit = setType;
this.$onChanges = setType;

第一个正在工作,而第二个则没有。我正在使用 '<' 绑定。所以在第一次加载时,组件的状态是根据传递的值设置的,同时不会反映更改。我希望它能从 [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 开始工作

原文由 leitasat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 222
1 个回答

从 AngularJs 1.5.3 开始,假设 ctrl.someModel 在子组件中被单向绑定,以下不会触发 $onChanges。

 function get() {
  api.getData().then( (data) => {
    ctrl.someModel.data = data
  }
}

似乎更新对象的属性不会被识别为更新。

这就是我目前解决它的方式。我不认为这是最好的解决方案,但它会触发 $onChanges。我创建了初始模型的深层副本,将数据添加为其属性之一,然后将初始模型设置为新对象的值。本质上,我更新了整个对象,它由生命周期挂钩获取:

 function get() {
  api.getData().then( (data='42') => {
    const updatedModel = angular.copy(ctrl.someModel)
    updatedModel.data = data
    ctrl.someModel = updatedModel
  }
}

在子组件中(假设模型被绑定为“数据”):

 this.$onInit = function(bindings) {
  if (bindings.data && bindings.data.currentValue) {
    console.log(bindings.data.currentValue) // '42'
  }
}

原文由 Jonathan Dupré 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题