gpt4 book ai didi

javascript - angular 1.5 - 单向数据流 - parent 只在第一次更新子原始值,一次性?

转载 作者:行者123 更新时间:2023-11-30 00:05:37 28 4
gpt4 key购买 nike

我是 Angular 1.5 的新手,正在学习单向数据流的最佳实践。我要离开这个 jsfiddle,我真的很困惑特别是一种行为。

我理解数据从父级向下流向子级并且是单向绑定(bind)的,即子级的变化不会影响父级。这似乎一直适用于所讨论的对象,但对于原语,数据流最初发生的一种方式,但原语值保持不变 (10),如隔离组件更新值函数中定义的那样。因此,如果您执行以下操作:

  1. 点击“Change Parent Values”, child 接收到数据并且是更新。
  2. 单击隔离/子基元的“更改隔离值”值变为 10,父级不受影响
  3. 观察在通过“更改父级”更新父级值后Values”,隔离原始值 是 10永远,即使对象更新正确。为什么会这样, child 如何接收更新以一种方式遵循 Angular 1.5 时来自父级的原始值数据流最佳实践?

https://jsfiddle.net/toddmotto/wauana12/

this.updateValues = function () {
this.prim = 10;
this.obj = {
john: {
age: 35,
location: 'Unknown'
}
};
};

更新:所以在父 Controller 的 this.updateValues 里面我将 this.somePrimitive = 33 更改为

this.somePrimitive = Math.random();

它按我预期的方式工作,我仍然不确定为什么,希望能帮助理解...


更新 2:我认为这是因为父 Controller 的 updateValues 函数实际上并没有对原语进行更改,所以 child 无法知道更新。上面的更新强制更改原语。由于该对象是通过引用的,因此它将始终被“更改”。

但是,我觉得数据绑定(bind)的一种方式的意图在这里丢失并被破坏(React ftw)。有没有办法手动更新 child ,而不是依赖 parent $watch?

最佳答案

这是因为父 Controller 的 updateValues 函数实际上并没有对原语进行更改,所以 child 无法知道更新。上面的更新(使用 Math.random())强制更改原语。由于对象是通过引用将始终被“更改”,但由于基元是不可变的,因此不会。传递应该重新分配给子组件的原语,并通过使用对象很好地处理 Angular 变化检测,可能不是最好的主意。

关于javascript - angular 1.5 - 单向数据流 - parent 只在第一次更新子原始值,一次性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38661617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com