当我们将model
传递给子组件并对其进行修改时,这些值只会反映在子组件的局部变量中,而不能用于父组件。我们可以通过引用从父到子传递值。所以这些变化也是可见的。
我在服务层使用observable
实现了相同的功能。但我们不能通过@Input
传递参考资料吗?
答案 0 :(得分:34)
原始值(string
,num
,boolean
,对象引用)通过值传递(复制),对象和数组通过引用传递(两个组件都获取对引用的引用)相同的对象实例)。
只需将原始值包装在对象中,更改将反映在两侧。
Angular2更改检测未检测到数组或对象属性中值的更改(绑定表达式解决它们时除外)。
答案 1 :(得分:0)
实际上-Angular中有一个“技巧”,可让您将基本类型(如字符串或数字)传递给子组件,并将这些更改发送回父组件引用的数据。这是通过创建一个名称与输入完全匹配的“输出EventEmitter”来完成的,但后缀为“ Change”。我不确定这是否在任何正式的Angular文档中都有记录-经过粗略的检查后我找不到它。
无论如何,记录我能够找到的这项技术的最佳堆栈溢出文章是这样的: https://stackoverflow.com/a/37855138/5692144
也有这篇文章-但它没有专门讨论@Output EventEmitter的命名要求: https://stackoverflow.com/a/43571004/5692144
而且我已经确认该功能可以按照说明进行操作。
我不确定为什么Angular的建筑师/设计师没有将这种技术称为“头等公民”,不需要您使用它来混淆/混淆命名约定(针对您的Output EventEmitter)。