vue data 数组,视图层绑定数据无法更新

1 篇文章 0 订阅
1 篇文章 0 订阅

vue data 数组插入新属性,新数据在视图层无法实现双向绑定

问题描述:vue 中的data对象数组在插入新数据后,新数据变更,View视图不会更新数据,如下方代码

<template>
    <div>
    	<div v-for="(item,i) of list">
    		<p>{{item.cb}}</p> //未能双向绑定
    		<p>{{item.price}}</p> //能实现双向绑定
    	</div>
    </div>
</template>
export default {
  data(){
    return {
      list:[{id:0,price:88},{id:1,price:99}],
    }
  },
  methods:{
    init(){
    var list=this.list
      for(var i of data){
        i.cb=false //在原数组对象中新加入cb属性,
      }
      this.list=list
    },
    cart_btn(key){
      this.list[key].cb=!this.list[key].cb
      console.log(this.list) //当打印后,cb发生改变,但view视图未改变(除cb外,其他能更新)
    }
  },
  created(){
    this.init()
  }
}

错误原理:vue data数组list的数据格式为[_ob_:observer] 当用list赋值遍历,插入cb对象时,数据格式为

[cb:false,_ob_:observer] ,cb未插入到observer里,所以cb在前台未能实现同步.

解决办法

在数组数据格式不为[_ob_:observer] 时插入数据,再赋值给list ,此时数据格式自动变为[_ob_:observer],cb就被插入到observer中.

export default {
  data(){
    return {
      list:[],
    }
  },
  methods:{
    init(){
      var data=[{id:0,price:88},...] 
      for(var i of data){
        i.cb=false //此时数组的数据格式还不是 [__ob__:observer],在插入新数据后,再赋值给list
      }
      this.list=data //将数据赋值给 vue data 时数据就会转换为[__ob__:observer]
    },
    cart_btn(key){
      this.list[key].cb=!this.list[key].cb
    }
  },
  created(){
    this.init()
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值