如何更改通过单向绑定传递给子组件的对象

问题描述 投票:0回答:1

我正在使用AngularJS 1.6和基于组件的Web应用程序。我正在构建一个包含表的新组件,并在选择一行时显示另一个无状态组件,其中包含有关该行的对象的详细信息(该行通过'

ctrl.$onChange = function(changes) {
    if (changes.row) {
        this.row = angular.copy(this.row);
    }
};

从某种意义上说,它确实起作用,因为子组件中的更改不再更改父组件中的对象,这导致按引用绑定被破坏。

问题是:如果我在表中选择另一行,则更改的对象不再传递下去,无状态组件不会“识别”绑定中的更改对象!如果我省略上面的代码,它可以工作,但是在迁移到Angular时它仍然可以工作吗?我该怎么办?

angularjs components
1个回答
1
投票

复制更改:

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() }形式的对象。使用此挂钩可触发组件中的更新,例如克隆绑定值以防止外部值意外突变。请注意,绑定初始化时也会调用此方法。

有关更多信息,请参阅

© www.soinside.com 2019 - 2024. All rights reserved.