我刚开始学习角1.5,学习单向数据流的最佳实践。我要摆脱这种胡言乱语,特别是对一种行为感到困惑。
据我所知,数据从父到子之间流动,是单向绑定的,即孩子中的变化不影响父方。这似乎一直适用于所讨论的对象,但对于原语来说,单向数据流最初会发生,但原语值与隔离组件更新值函数中定义的相同(10)。因此,如果您执行以下操作:
https://jsfiddle.net/toddmotto/wauana12/
this.updateValues = function () {
this.prim = 10;
this.obj = {
john: {
age: 35,
location: 'Unknown'
}
};
};更新:因此,在父控制器的this.updateValues内部,我将this.somePrimitive = 33更改为
this.somePrimitive = Math.random();它的工作方式,我仍然不知道为什么,并将感谢帮助理解.
更新2:我认为这是因为父控制器updateValues函数实际上并没有对原语进行更改,所以子控制器不可能知道更新。上面的更新强制对原语进行更改。由于该对象是引用的,因此它总是“更改”。
但是,我觉得单向数据绑定的意图在这里丢失了,并且被破坏了()。是否有手动更新子程序,而不依赖父$watch?
发布于 2016-07-29 15:19:05
这是因为父控制器updateValues函数实际上并没有对原语进行更改,因此无法让子控制器知道更新。上面的更新(使用Math.random())强制对原语进行更改。由于对象是引用的,所以它总是被“更改”,但是由于原语是不可变的,所以不会。传递原语可能不是最好的方法,这些原语应该重新分配给子组件,并通过使用对象来很好地处理angulars更改检测。
https://stackoverflow.com/questions/38661617
复制相似问题