javascript - Angular 1.5 组件 onChanges 不起作用

标签 javascript angularjs

由于我们有相当大的 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/

相关文章:

javascript - AngularJS ng-repeat 如何从 jquery 每行添加数据

javascript - 层叠动画

PHP/Javascript - 引用引用为空

javascript - 输入未绑定(bind)的 Ng-model 返回未定义

javascript - promise - catch 不工作

javascript - Bootstrap 预输入和带引号的字符串

javascript - 在 Angularjs 中刷新后重定向到登录页面

javascript - JS变量范围: pushing into an array in one function and accessing it another function

javascript - 回调函数的词法作用域

angularjs - ui-bootstrap datepicker 启用周末