当绑定项是对象并动态修改时,单向绑定不起作用
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 文档中也有更详细的解释。
请查看 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 文档中也有更详细的解释。