VUE在A监听里面改变B监听,B监听再次改变监听不到值的问题

最近在写项目的时候碰到一个奇怪的问题,记录下.

代码如下

<template>
      <el-input class="bill-input" placeholder="请输入" v-model="data.charge"/>
</template>
<script>
  data () {
    return {
      data: {
        list: [],
        charge:0,
      },
}
 mounted () {
   this.init()
 }
 watch: {
    "data.list": {
      handler (newValue, oldValue) {
        this.data.charge = 100
      },
      deep: true
    },
    'data.charge': {
      handler (newValue, oldValue) {
        console.log(newValue)
        console.log(oldValue)
      },
      deep: true,
    },
  },
methods:{
init(){
    this.data = {
         list: [],
         charge:0,
                } 
}
</script>

当页面初始化的时候,使this.data.list 改变,改变后执行监听在改变data.charge 此时所有监听都可以正常执行,然而在inpout 中改v-model 的值的时候,data.charge 是不能够被触发的

怀疑原因:视图渲染完毕后,数据才被动态赋值,此时视图层并没有更新该数据

解决办法:

 watch: {
    "data.list": {
      handler (newValue, oldValue) {
         //使用this.$set(obj, key, value)/vue.set(obj, key, value)
        this.$set(this.data,'charge',100)
      },
      deep: true
    },
    'data.charge': {
      handler (newValue, oldValue) {
        console.log(newValue)
        console.log(oldValue)
      },
      deep: true,
    },
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值