【问题标题】:Avoid 2 way databinding on data assignment in Vue.js避免在 Vue.js 中对数据分配进行 2 路数据绑定
【发布时间】:2018-02-16 17:44:34
【问题描述】:

我有一个 vue 实例:

    var vue = new Vue({
      el: '#vue-wrapper',
      data: {
        items: [],
        selectedItem: ''
    })

我使用来自我的 phoenix 服务器的数据初始化项目,如下所示:

vue.items = <%= raw(@stories) %>

当我的页面加载完毕后,我想选择第一项作为起始项:

vue.selectedItem = vue.items[0]

我的 html 中有一个输入字段绑定到我的对象的标题属性

<input type="text" v-model="selectedItem.title"></input>

数据绑定工作正常,问题是 items[0] 正在与 selectedItem 一起更新,我不想要它。 我试过的:

var x = vue.items[0];
vue.selectedItem = X;

仍然绑定,

var x = <%= raw(@stories) %>
vue.items = x[0]
vue.selectedItem = x[0]

仍然绑定,并且:

vue.selectedItem = Object.assign({}, vue.items[0]);

对象之间仍然存在绑定。 我怎样才能只为 selectedItem 获得 2 路数据绑定?

【问题讨论】:

  • 是的,因为它是一个编辑器。所以它应该是可编辑的
  • 试试vue.selectedItem = { ...vue.items[0] };,或者vue.selectedItem = JSON.parse(JSON.stringify(vue.items[0]));或者使用lodash#cloneDeep之类的东西,你需要克隆对象,现在你有一个对原始对象的引用。

标签: javascript vue.js phoenix-framework 2-way-object-databinding


【解决方案1】:

我在 jsfiddle 中复制了您的案例,并且 Object.assign 运行良好。

var vue = new Vue({
      el: '#vue-wrapper',
      data: {
          items: [{
            title: 'title-item'
          }],
          selectedItem: ''
      }
    })

    vue.selectedItem = Object.assign({}, vue.items[0])

https://jsfiddle.net/50wL7mdz/107302/

【讨论】:

  • 我明白了。我已经尝试过了,但绑定仍然是真实的。我需要检查我的代码,看看我是否在其他地方进行了另一个绑定。谢谢托马斯
猜你喜欢
  • 2017-10-11
  • 2017-03-20
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多