【问题标题】:Vue.js 2: Delete property from data objectVue.js 2:从数据对象中删除属性
【发布时间】:2017-12-10 18:55:49
【问题描述】:

如何从 Vue.js 数据对象(即关联数组)中删除属性/键,如下所示:

var vm = new Vue({
    data: {
        users: {
            foo : { firstName: ..., lastName: ... },
            bar : { firstName: ..., lastName: ... }
        }
    },
    methods: {
        someFunction : function ()
        {
            // how to remove `users.foo`?
        }
    }
});

谷歌搜索,我找到了这两种方法,但都不起作用:

  • delete this.users.foo; 没有更新 DOM
  • this.users.splice('foo', 1); 根本不起作用(可能仅适用于数组,不适用于对象)

【问题讨论】:

  • 我相信 vue2 实现了自己的数组拼接。正如你所说,它不适用于对象。

标签: javascript vue.js vuejs2


【解决方案1】:

答案是:

Vue.delete(users, 'foo');

我花了一段时间才找到它,这就是我在这里发布它的原因;-)
https://github.com/vuejs/vue/issues/3368#issuecomment-236642919

【讨论】:

【解决方案2】:

知道vm.$deleteVue.delete 的别名很重要,如果你尝试this.delete() 之类的东西,你会得到一个错误。所以在你的例子中,答案是:

this.$delete(this.users, 'foo')

vm.$delete(vm.users, 'foo')

https://vuejs.org/v2/guide/migration.html#vm-delete-changed

【讨论】:

  • 非常感谢。这确实是一个正确的答案。它可以解决 VUEJS 无法观看删除或添加的数据的问题。
【解决方案3】:

您必须创建对象的新副本,以便 Vue 能够知道发生了变化:

ES6

const users = { ...this.users };
delete users['foo'];
this.users = users

没有扩展运算符它会是

const users = Object.assign({}, this.users);
delete users['foo'];
this.users = users

【讨论】:

  • 使用Vue.delete 比这个解决方案更可取,因为它不涉及创建一个全新的对象,因为它在这里完成
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 2018-05-10
  • 1970-01-01
  • 2020-04-28
  • 2021-09-11
  • 1970-01-01
  • 2015-12-07
  • 2020-05-30
相关资源
最近更新 更多