我正在使用AngularJS 1.6和基于组件的Web应用程序。我正在构建一个包含表的新组件,并在选择一行时显示另一个无状态组件,其中包含有关该行的对象的详细信息(该行通过'
ctrl.$onChange = function(changes) {
if (changes.row) {
this.row = angular.copy(this.row);
}
};
从某种意义上说,它确实起作用,因为子组件中的更改不再更改父组件中的对象,这导致按引用绑定被破坏。
问题是:如果我在表中选择另一行,则更改的对象不再传递下去,无状态组件不会“识别”绑定中的更改对象!如果我省略上面的代码,它可以工作,但是在迁移到Angular时它仍然可以工作吗?我该怎么办?
复制更改:
ctrl.$onChange = function(changes) {
if (changes.row) {
̶t̶h̶i̶s̶.̶r̶o̶w̶ ̶=̶ ̶a̶n̶g̶u̶l̶a̶r̶.̶c̶o̶p̶y̶(̶t̶h̶i̶s̶.̶r̶o̶w̶)̶;̶
this.row = angular.copy(changes.row.currentValue);
}
};
来自文档:
生命周期挂钩
指令控制器可以提供以下指令,这些指令由AngularJS在指令生命周期的各个点调用:
$onChanges(changesObj)
-每当单向(<
)或插值(@
)绑定更新时调用。changesObj
是一个哈希,其键是已更改的绑定属性的名称,而值是{ currentValue, previousValue, isFirstChange() }
形式的对象。使用此挂钩可触发组件中的更新,例如克隆绑定值以防止外部值意外突变。请注意,绑定初始化时也会调用此方法。
有关更多信息,请参阅