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)功能。因此,如果您执行以下操作:

  1. 点击"Change Parent Values",child收到数据,是 更新。
  2. 单击 "Change Isolate Values" isolate/child 原语 值变为十,parent 不受影响
  3. 观察在通过“更改 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.

很好地处理角度变化检测