Javascript 为什么v-for in模板在输入文本更改时更新?

Javascript 为什么v-for in模板在输入文本更改时更新?,javascript,vue.js,Javascript,Vue.js,我在vuejs中有此代码,但模板中的for没有更新。 当在输入文本中添加一些数据时,它会改变,但我想更新@click中的列表 Vue.js无法检测对象中的新属性。看 您可以使用Vue.set(): Vue.js无法检测对象中的新属性。看 您可以使用Vue.set(): 看起来您遇到了vue.js文档中定义的对象更改检测警告。具体来说,您似乎正在添加一个以前不存在的新对象属性,因此无法检测到更改 以下是一个可能的修复方法: methods: { addModule:function(){

我在vuejs中有此代码,但模板中的for没有更新。 当在输入文本中添加一些数据时,它会改变,但我想更新@click中的列表


Vue.js无法检测对象中的新属性。看

您可以使用Vue.set():


Vue.js无法检测对象中的新属性。看

您可以使用Vue.set():


看起来您遇到了vue.js文档中定义的对象更改检测警告。具体来说,您似乎正在添加一个以前不存在的新对象属性,因此无法检测到更改

以下是一个可能的修复方法:

methods: {
    addModule:function(){
        var size = Object.keys( this.modules ).length;
        this.modules[size] = {
            enumerate: '1.1',
            name: 'test',
            description: 'test d',
            type: 'module',
            criteria: {}
        };
        this.modules = Object.assign({}, this.modules);
        console.log(this.modules);
    }
}
添加的行将作为原始对象克隆版本的指定行。由于此克隆对象实际上是一个单独的对象,因此将强制检测相关的更改


但是,请注意,如果需要,深度克隆将需要额外的工作。

看起来您遇到了vue.js文档中定义的对象更改检测警告。具体来说,您似乎正在添加一个以前不存在的新对象属性,因此无法检测到更改

以下是一个可能的修复方法:

methods: {
    addModule:function(){
        var size = Object.keys( this.modules ).length;
        this.modules[size] = {
            enumerate: '1.1',
            name: 'test',
            description: 'test d',
            type: 'module',
            criteria: {}
        };
        this.modules = Object.assign({}, this.modules);
        console.log(this.modules);
    }
}
添加的行将作为原始对象克隆版本的指定行。由于此克隆对象实际上是一个单独的对象,因此将强制检测相关的更改


但是,请注意,如果需要,深度克隆将需要额外的工作。

或将
this.modules
更改为数组并使用
this.modules.push({…})
。是的@Botje您可以使用数组,但如果EdgarAlejandro更喜欢对象…或将
this.modules
更改为数组并使用
this.modules.push({…})
。是@Botje您可以使用数组,但如果EdgarAlejandro更喜欢对象。。。
methods: {
    addModule:function(){
        var size = Object.keys( this.modules ).length;
        this.modules[size] = {
            enumerate: '1.1',
            name: 'test',
            description: 'test d',
            type: 'module',
            criteria: {}
        };
        this.modules = Object.assign({}, this.modules);
        console.log(this.modules);
    }
}