javascript - VueJS : Updating data from method makes the properties synced

标签 javascript vue.js

我正在使用VueJS。有一个非常简单的案例。我有以下数据:

  data: {
    a: {"name":null},
    b: {"name":null}
  }

我正在获取用户输入并使用 v-model 将其附加到“a”。

<input type="text" v-model="a.name">

然后我有一个方法,当触发时,应该将值从 a 复制到 b。

save() {
  this.b=this.a
}

第一次工作正常,但是一旦我触发了该方法,a 和 b 就会永久同步。为什么会发生这种情况,除非触发 save 方法,否则如何将 a 和 b 分开。因此,在该方法被触发一次后,每次更新 a​​ 时,它也会更新 b,这是不应该发生的。

下面的 JS Bin 显示了问题:

https://jsbin.com/kofobifego/1/edit?html,js,console,output

最佳答案

这是因为对象在JS中是引用类型。请尝试以下代码。

save() {
  this.b.name = this.a.name
}

简化解释: 当您在 JavaScript 中创建对象时,内存中会为该对象保留一个空间。您分配给变量的是对该对象的引用 - 将其视为指向对象所在内存位置的路径/链接。因此下面的代码...

this.b = this.a 

...获取 this.a 保存的引用并将其副本分配给 this.b。现在,this.athis.b 都分配了引用,但它指向内存中的同一对象。这就是为什么修改 this.a 也会“修改”this.b

请引用this article有关该主题的更详细解释。

关于javascript - VueJS : Updating data from method makes the properties synced,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55534516/

相关文章:

vue.js - vue js axios,发送POST到elasticsearch

javascript - 如何在 Vue 中转发 $refs

javascript - 如何结合execute_scipt和WebdriverWait

javascript - Angular InterpolateProvider 不工作(自定义分隔符)

vue.js - Nuxt js - 在动态路由中传递对象参数

reactjs - 具有基于 HttpOnly cookie 的身份验证和 session 管理的单页应用程序

javascript - IndexedDB 在需要升级时处理数据迁移

javascript - 在我的 React 组件中打印文本中的字母,就像老式视频游戏一样

javascript - 使用转换和 JavaScript 来订购 CSS 样式

python - Electron 应用程序与打开的其他浏览器之间如何通信?