angular 1.5 - 单向数据流 - parent 仅在第一次更新 child 原始值,one-time?
angular 1.5 - one way data flow - parent updates child primitive value the first time only, one-time?
我是 angular 1.5 的新手,正在学习单向数据流的最佳实践。我要离开这个 jsfiddle,特别是对一种行为真的很困惑。
我了解数据从 parent 流向 child 并且是单向绑定的,即 child 中的更改不会影响 parent。这似乎一直适用于所讨论的 object,但对于原语,数据流最初发生的一种方式,但原语值保持与隔离组件更新值中定义的相同 (10)功能。因此,如果您执行以下操作:
- 点击"Change Parent Values",child收到数据,是
更新。
- 单击 "Change Isolate Values" isolate/child 原语
值变为十,parent 不受影响
- 观察在通过“更改 Parent 更新 parents 值后
Values”,隔离原始值 是 10
永远 ,即使 object 正确更新。为什么会这样,child 如何接收更新
parent 的原始值,同时遵循 angular 1.5 的一种方式
数据流最佳实践?
https://jsfiddle.net/toddmotto/wauana12/
this.updateValues = function () {
this.prim = 10;
this.obj = {
john: {
age: 35,
location: 'Unknown'
}
};
};
更新:
所以在 parent 控制器的 this.updateValues 里面
我把this.somePrimitive = 33
改成了
this.somePrimitive = Math.random();
它按我预期的方式工作,我仍然不确定为什么,希望能帮助理解...
更新 2:我认为这是因为 parent 控制器 updateValues 函数实际上并没有对原语进行更改,所以 child 无法知道更新。上面的更新强制更改原语。由于 object 是引用,因此它总是 "changed"。
但是,我觉得数据绑定的一种方式的意图在这里丢失并被破坏(React ftw)。有没有办法手动更新 child,而不是依赖 parent $watch?
这是因为 parent 控制器 updateValues 函数实际上并未对原语进行更改,因此 child 无法知道更新。上面的更新(使用 Math.random())强制更改原语。由于 object 是引用,因此它始终是 "changed",但由于基元是不可变的,所以它不会。传递应该重新分配给 child 组件的基元可能不是最好的主意,并且可以通过使用 objects.
很好地处理角度变化检测
我是 angular 1.5 的新手,正在学习单向数据流的最佳实践。我要离开这个 jsfiddle,特别是对一种行为真的很困惑。
我了解数据从 parent 流向 child 并且是单向绑定的,即 child 中的更改不会影响 parent。这似乎一直适用于所讨论的 object,但对于原语,数据流最初发生的一种方式,但原语值保持与隔离组件更新值中定义的相同 (10)功能。因此,如果您执行以下操作:
- 点击"Change Parent Values",child收到数据,是 更新。
- 单击 "Change Isolate Values" isolate/child 原语 值变为十,parent 不受影响
- 观察在通过“更改 Parent 更新 parents 值后 Values”,隔离原始值 是 10 永远 ,即使 object 正确更新。为什么会这样,child 如何接收更新 parent 的原始值,同时遵循 angular 1.5 的一种方式 数据流最佳实践?
https://jsfiddle.net/toddmotto/wauana12/
this.updateValues = function () {
this.prim = 10;
this.obj = {
john: {
age: 35,
location: 'Unknown'
}
};
};
更新:
所以在 parent 控制器的 this.updateValues 里面
我把this.somePrimitive = 33
改成了
this.somePrimitive = Math.random();
它按我预期的方式工作,我仍然不确定为什么,希望能帮助理解...
更新 2:我认为这是因为 parent 控制器 updateValues 函数实际上并没有对原语进行更改,所以 child 无法知道更新。上面的更新强制更改原语。由于 object 是引用,因此它总是 "changed"。
但是,我觉得数据绑定的一种方式的意图在这里丢失并被破坏(React ftw)。有没有办法手动更新 child,而不是依赖 parent $watch?
这是因为 parent 控制器 updateValues 函数实际上并未对原语进行更改,因此 child 无法知道更新。上面的更新(使用 Math.random())强制更改原语。由于 object 是引用,因此它始终是 "changed",但由于基元是不可变的,所以它不会。传递应该重新分配给 child 组件的基元可能不是最好的主意,并且可以通过使用 objects.
很好地处理角度变化检测