【发布时间】:2019-12-12 19:17:39
【问题描述】:
我对 Angular 还很陌生,希望有人能对此有所了解。
方法 1: 假设我使用 1 路数据绑定将父对象“x”传递给子组件:
<app-child [x]="x"></app-child>
我的子组件在 ts 中这样修改它:
Input() x;
然后:
this.x.someProperty = 'some new value';
这似乎工作正常,我在父级中的“x”对象已更新。
但是,在 Angular 教程和其他示例(例如 https://stackoverflow.com/a/41465022)中,执行此操作的“正确”方法似乎是 方法2:使用2路绑定例如:
<app-child [(x)]="x"></app-child>
在ts中
@Input() x: any;
@Output() xChange = new EventEmitter<any>();
然后:
this.x.someProperty = 'some new value';
this.xChange.emit(x);
我目前非常高兴地在 Angular 7 中使用方法 1,没有任何问题 - 谁能解释为什么(如果有的话)我应该改用方法 2?由于方法 1 有效,这似乎更复杂且不必要。
【问题讨论】:
-
不应更新您的父属性。您是否将对象作为
x传递,然后对所述对象进行变异? -
您是否 100% 确定您的父组件中的值已更新?它不应该。除非您引用对象属性,否则在这种情况下,由于您引用了对象,更改属性 (
this.x.someAttribute = 'some value') 也会在父组件中更改它。 -
是的,你都是正确的 - x 实际上是一个对象 - 为了这个问题,我将它简化为一个字符串..
-
已编辑问题并将 x 更改为对象