vue.js - v-model 奇怪的行为或在 VueJS 中是正常的
问题描述
我在 v-model 中看到了一个奇怪的行为,但我不知道我应该怎么称呼它。这是正常的还是奇怪的。
HTML 标记:
<div id="app">
<div>EditItem: {{ editItem }}</div>
<div>FormData: {{ formData }}</div>
<input type="text" v-model="formData.name" label="name" />
</div>
脚本:
new Vue({
el: '#app',
data: {
editItem: { name: 'Mr. Coder' },
formData: null,
},
created() {
this.formData = this.editItem
},
所以我的问题是当我改变formData
使用 v-model 的输入值时,它也改变了editItem
值。但为什么?我已经附加了formData
使用created
方法的价值。所以它应该改变formData
唯一的。谁能详细解释一下这种行为,或者有什么方法不会改变editItem
值但只能formData
使用 v-model 来改变?谢谢。
供您参考,请参阅 JSFiddle URL:https ://jsfiddle.net/nhxjp8m1/
解决方案
这不是 Vue 特定的行为,而是 JavaScript 的行为。当你写
this.formData = this.editItem
它没有创建 editItem 的副本,而是 formData 现在 REFERS to editItem。因此更改 formData 直接更改 editItem ,反之亦然。
我相信您寻求的行为需要使用将 editItem 复制到 formData 中Object.assign()
。
有关 JavaScript 的更多信息,我建议浏览这个网站。
推荐阅读
- docker - 使用自制软件安装特定版本的一致
- java - 使用 CrossProfileApps 在托管配置文件上运行应用程序
- typescript - Typeorm:从加载的关系中只返回一个属性
- c++ - 使用 C++ 标准库模拟 mkdir -p
- python - np.genfromtxt 返回带有 'b' 的字符串
- javascript - 使用 onclick 事件侦听器从另一个 html 文件调用 js 函数
- google-apps-script - 在 Google App Script 中更改 Widget KeyValue Switch SetValue 的值
- oracle11g - oracle查询,union语句比单个语句慢
- c++ - 如何将多个元素附加到协议缓冲区中的重复字段?
- ethereum - 如何只允许某些用户执行智能合约方法?