【发布时间】:2016-05-19 17:11:22
【问题描述】:
这可能是一个简单的解释,所以请原谅我的无知。
当使用来自子组件的数组并在传递的值上使用.pop()、.splice()、.push() 时,它会很好地保留父数组值,但是当我尝试分配值时(=)它不会将数组持久化在父组件中。
我创建了一个simple example on Plunker。
该程序有 3 个按钮,清除、弹出和重新加载。
清除列表 - 将 @Input list 分配给一个空数组 (this.list = [])。注意父组件计数器没有改变
Pop - 在列表中执行.pop()。请注意,父组件计数器发生了变化。
为什么我不能简单地分配数组值?
我知道可以使用
EventEmitter并让家长收听 事件并以这种方式更新。我试图理解这一点 场景,看看我是否可以避免额外的代码。
【问题讨论】:
-
说
list指向内存0x123。pop方法更改内存地址0x123上的数组,因此,更改反映在父级和子级中。 clear 方法将子组件的list属性分配给0x321,父组件的list属性指向0x123,该内存地址没有发生变化。 -
解决方案。
this.list.length = 0;但是,您应该明白让两个小部件操作相同的数据会使您的逻辑难以遵循。这就是为什么有像 redux 这样的框架,所以数据可以以一种方式流动,而另一种方式的更新以一致的、可调试的方式发生。一种中间方法是从子小部件发出和事件,并让父小部件响应该事件并更新列表 -
非常感谢小伙伴们的解释
标签: javascript arrays angularjs angular