当绑定项是对象并动态修改时,单向绑定不起作用

one-way binding does not work when binding item is object and modified dynamically

请查看 plnkr 查看代码。

我在 AngularJS 组件中真的很新。我用完全相同的绑定写了两个简单的 AngularJS 组件。

 bindings: { value:'@', field:'@', object: '<', callback: '&' }   

我通过 object 将 Javascript 对象传递到我的组件中。 field 在我的 JS 对象中指定了 属性 的名称。最后,value引用JS对象的属性.

的新值
object[field] = value

如果组件不在其控制器中克隆 object,则单向绑定不起作用(请参阅 plnkr 中的 onewaybindingfail 组件)。但是,通过在组件的控制器中克隆 object 一切都很好。

我想知道这种行为是否符合预期?如果是,为什么?或者我遗漏了什么?

感谢您的帮助。

此行为是预期的。用“<”表示单向绑定仅意味着 angular 不会监视组件端的更改,但如果您更改组件端的对象,原始对象仍将被修改。这个在官方angular文档中也有提到here.

因此,如果您需要使用该对象,建议您复制该对象。您最好使用回调函数来更改父对象。这在官方 angular 文档中也有更详细的解释。