Javascript 角度1.5-单向数据流-父级仅第一次更新子基元值,一次性?

Javascript 角度1.5-单向数据流-父级仅第一次更新子基元值,一次性?,javascript,angularjs,components,Javascript,Angularjs,Components,我是angular 1.5的新手,学习单向数据流的最佳实践。我要离开这个jsfiddle了,我真的对其中一个行为感到困惑 我理解数据从父级流向子级,是单向的,即子级的更改不会影响父级。这似乎一直适用于所讨论的对象,但对于基本体,最初是单向数据流,但基本体值保持与“隔离组件更新值”函数中定义的相同(10)。因此,如果您执行以下操作: 单击“更改父值”,子项将接收数据并 更新 单击“更改隔离值”隔离/子图元 值更改为10,并且父项不受影响 请注意,在通过“更改父项”更新父项值之后 值”,隔离原语值再

我是angular 1.5的新手,学习单向数据流的最佳实践。我要离开这个jsfiddle了,我真的对其中一个行为感到困惑

我理解数据从父级流向子级,是单向的,即子级的更改不会影响父级。这似乎一直适用于所讨论的对象,但对于基本体,最初是单向数据流,但基本体值保持与“隔离组件更新值”函数中定义的相同(10)。因此,如果您执行以下操作:

  • 单击“更改父值”,子项将接收数据并 更新
  • 单击“更改隔离值”隔离/子图元 值更改为10,并且父项不受影响
  • 请注意,在通过“更改父项”更新父项值之后 值”,隔离原语值再次为10 永远,即使对象更新正确。为什么会这样,孩子如何接收更新 在单向执行角度1.5时从父对象获取基本体值 数据流最佳实践

  • 更新: 因此,在父控制器中的this.updateValue中 我将this.somePrimitive=33更改为

    this.somePrimitive = Math.random();
    
    它以我预期的方式工作,我仍然不确定为什么,并希望能帮助我理解


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


    然而,我觉得单向数据绑定的意图在这里丢失了,并且被破坏了(React-ftw)。是否仍然需要手动更新子级,而不依赖父级$watch

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

    this.somePrimitive = Math.random();