vue数组和对象不能直接赋值


问题情况:

<Row :key="index"
    v-for="item,index in strategy_level_list"
>
    <Col
        <input :key="index" @input="changeFunc(index, $event)"> 
    >
    </Col>
</Row>
<button @click="addStrategy">增加策略等级</button>


data(){
    return{
        strategy_level_list: [],
        strategy_level_item: { "key": -1 }
    }
},
methods:{
    addStrategy(){
        this.strategy_level_list.push(this.strategy_level_item);
    },
    changeFunc(index, value){
        strategy_level_list[index].key = value;
    }
}

 

上述代码会导致:每次更改input框中的内容时,所有input框的value都会同步改变

 

问题原因:

Vue不能检测以下变动的数组: 

  当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue

  当你修改数组的长度时,例如:vm.items.length = newLength

  当第一种情况需求时,可以使用this.$set(this.arr,index,newVal)

Vue不能检测对象属性的添加和删除:

  可以使用this.$set(this.person,'age',12)

     当需要添加多个对象时,Object.assign({},this.person,{age:12,name:'wee'})

 

 

解决方法:

将changFunc中的代码修改成

changeFunc(index, value){
    let newVal = { "key":value };
    this.$set(this.strategy_level_list, index, newVal);
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM