首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角1.5 -单向数据流-父只更新子原语值第一次,一次?

角1.5 -单向数据流-父只更新子原语值第一次,一次?
EN

Stack Overflow用户
提问于 2016-07-29 14:43:38
回答 1查看 338关注 0票数 2

我刚开始学习角1.5,学习单向数据流的最佳实践。我要摆脱这种胡言乱语,特别是对一种行为感到困惑。

据我所知,数据从父到子之间流动,是单向绑定的,即孩子中的变化不影响父方。这似乎一直适用于所讨论的对象,但对于原语来说,单向数据流最初会发生,但原语值与隔离组件更新值函数中定义的相同(10)。因此,如果您执行以下操作:

  1. 单击“更改父值”,子节点将接收数据并进行更新。
  2. 单击“更改隔离值”,隔离/子基元值更改为10,父元素未受影响。
  3. 观察到,在再次通过“更改父值”更新父值后,隔离原语值为10永久,即使对象正确更新。为什么是这样,以及如何在遵循角1.5单向数据流最佳实践的同时,从父元素接收更新的原始值?

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

代码语言:javascript
复制
this.updateValues = function () {
  this.prim = 10;
  this.obj = {
    john: {
      age: 35,
      location: 'Unknown'
    }
  };
};

更新:因此,在父控制器的this.updateValues内部,我将this.somePrimitive = 33更改为

代码语言:javascript
复制
this.somePrimitive = Math.random();

它的工作方式,我仍然不知道为什么,并将感谢帮助理解.

更新2:我认为这是因为父控制器updateValues函数实际上并没有对原语进行更改,所以子控制器不可能知道更新。上面的更新强制对原语进行更改。由于该对象是引用的,因此它总是“更改”。

但是,我觉得单向数据绑定的意图在这里丢失了,并且被破坏了()。是否有手动更新子程序,而不依赖父$watch?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 15:19:05

这是因为父控制器updateValues函数实际上并没有对原语进行更改,因此无法让子控制器知道更新。上面的更新(使用Math.random())强制对原语进行更改。由于对象是引用的,所以它总是被“更改”,但是由于原语是不可变的,所以不会。传递原语可能不是最好的方法,这些原语应该重新分配给子组件,并通过使用对象来很好地处理angulars更改检测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38661617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档