【发布时间】:2019-12-20 11:03:45
【问题描述】:
我正在尝试使用 .filter() 方法修改 Vue.js 列表中的元素。新元素来自 Pusher。我正在监听事件并尝试像这样更新元素:
users.filter((obj) => {
Echo.private(`user.${obj.id}`).listen('.userupdated', (e) => {
return obj = e.user; // or return e.user; also doesn't work
});
});
这不起作用。两个对象在结构上是相同的,但是通过 Pusher 的新对象包含更新的信息。
另一方面,当我尝试修改属性时,它可以工作:
users.filter((obj) => {
Echo.private(`user.${obj.id}`).listen('.userupdated', (e) => {
return obj.name = e.user.name;
});
});
我做错了什么?是否不允许像这样替换整个元素?
【问题讨论】:
-
我正在尝试使用
.filter()方法修改 Vue.js 列表中的元素。 对于filter,这听起来不是一个好的用例。 -
@Psidom 感谢您的评论。您能否建议一种更好的方式来订阅多个 Pusher 频道?
-
一个简单的for循环应该可以吗?使用索引修改原数组?
-
obj.name有效,因为obj本身就是一个指向对象的引用,因此您通过执行obj.name = e.user.name来修改底层对象。在使用obj = e.user时,您将覆盖obj变量,这不会影响原始数组中存储的引用。 -
@Rehmat 修改属性在没有
return的情况下也可以正常工作。您不会从该回调返回到外部函数,因为返回不是那样工作的
标签: javascript vue.js pusher