为啥使用 Vue 编辑数据不能按预期工作

Posted

技术标签:

【中文标题】为啥使用 Vue 编辑数据不能按预期工作【英文标题】:Why Edit data with Vue not work as desired为什么使用 Vue 编辑数据不能按预期工作 【发布时间】:2019-02-27 22:38:19 【问题描述】:

我在这里发布我的代码 https://codesandbox.io/s/mm364r6ov8 我的问题是,当我单击编辑时,模态显示。但是,每当我更改字段名称(或其他字段)的数据时,该行的数据也会更改。 有什么建议吗?

【问题讨论】:

【参考方案1】:

由于在您的 EditModal 中您通过将其引用到用户列表中的用户对象来为其分配 user 属性,因此该数据发生了更改:

self = this;
EventBus.$on("edit-user", use => 
  self.user = use;
);

首先,不要在这里使用self,因为如果你使用箭头函数,它是多余的。

现在,要让它在您编辑输入时不编辑用户列表中的用户,您只需复制用户,例如使用Object.assign:

EventBus.$on("edit-user", user => 
  this.user = Object.assign(this.user, user);
);

或destructuring assignment:

this.user =  ...user 

请注意,Object.assign 和解构赋值都不会进行深度复制,因此如果您有许多嵌套属性,您可能希望自己实现深度复制功能。

我看到您可能尝试在将用户传递给您的模态之前制作其副本:

editUser(user) 
  var temp = user;
  EventBus.$emit("edit-user", temp);
,

但是,var temp = user; 仅将 user 引用分配给 temp,它不会创建新对象。

这应该可以解决您的问题,但您的模式的保存方法不起作用,但这是另一个问题。

【讨论】:

【参考方案2】:

感谢您的回答。最后,我找到了一种将数据从模式保存到结果行的方法。我必须使用

this.users.splice(8, 1, user)

而不是

this.users[8] = user;

在 saveData 方法中。

当然有

this.user = ...用户

@dziraf

【讨论】:

以上是关于为啥使用 Vue 编辑数据不能按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我在 UIHostingController 中使用 SwiftUI-transition 时,它不能按预期工作?

为啥 itertools groupby 不能按预期工作? [复制]

为啥 nodejs 中的睡眠不能按预期工作

为啥这个回滚功能不能按预期工作

为啥这个简单的 Boost::asio 程序不能按预期工作?

为啥我的 std::ref 不能按预期工作?