Vue.js 2:从数据对象中删除属性

时间:2017-07-06 16:30:30

标签: javascript vue.js vuejs2

如何从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);根本不起作用(可能只适用于数组,而不适用于对象)

3 个答案:

答案 0 :(得分:46)

答案是:

Vue.delete(users, 'foo');

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

答案 1 :(得分:9)

重要的是要知道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

答案 2 :(得分:0)

您必须创建对象的新副本,以便Vue能够知道有更改:

ES6

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

没有传播算子,它将是

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