组件上的Vue.js 2 - $ forceUpdate()不刷新计算属性?

时间:2017-02-17 14:24:08

标签: vue.js

我不确定我这样做是对还是错,但我似乎找到了所有答案,如何更新计算值的dom ......

我有这个组件:

Vue.component('bpmn-groups', {
    props: ['groups', 'searchQuery'],
    template: '#bpmn-groups',
    computed: {
        filteredGroups: function () {
            var self = this;
            return this.groups.filter(function(group) {
                self.searchQuery = self.searchQuery || '';
                return _.includes( group.name.toLowerCase(), self.searchQuery.toLowerCase() );
            });
        }
    },
    methods: {
        clearFilter: function () {
            this.searchQuery = '';
        },
        deleteGroup: function(group) {
            Vue.http.delete('api/groups/'+group.id ).then(response => { // success callback
                var index = this.groups.indexOf(group); // remove the deleted group
                this.groups.splice(index, 1);
                this.$forceUpdate(); // force update of the filtered list?
                toastr.success('Schemų grupė <em>'+group.name+'</em> sėkmingai pašalinta.');
            }, response => { // error callback
                processErrors(response);
            });
            this.$forceUpdate();
        },
    },
});

在模板中我只有一个简单的v-for来通过filteredGroups:

<input v-model="searchQuery" type="text" placeholder="Search..." value="">
<div v-for="group in filteredGroups" class="item">...</div>

删除工作正常,它将其从groups属性中删除,但filteredGroups值仍然具有完整的组,直到我实际执行搜索或以某种方式触发其他内容...

如何修复它以便在更新组后更新filteredGroup?

1 个答案:

答案 0 :(得分:4)

不要改变道具 - 它们不像数据定义的属性。有关更多信息,请参阅此处:

https://vuejs.org/v2/guide/components.html#One-Way-Data-Flow

相反,根据链接中的建议,声明一个从prop和mutate初始化的本地数据属性。