Vue开发遇到的一些问题(一)

Vue开发遇到的一些问题(一)

1、子组件使用watch监听父组件中的props传值时,watch无法监听到数组对象的变化:
例如:
这是子组件中监听的父组件数据

// 父组件数据
let modelList = [
    {
       type: 6,
       img: 'http://cdn.zhimatech.com/daohang.png',
       title: '导航菜单',
       icon: 'http://cdn.zhimatech.com/daohang_green.png',
       color: '#0DFDF2',
       background: '#0DFDF2',
       opacity: 0.15,
       kind:1,
       activeIcon: 'http://cdn.zhimatech.com/daohang.png',
       children: [ [
        {
          img:'',
          title:'标题'
       }
     ],[] ],
   },
]

我在父组件使用类似于这种形式来改变this.modelList中的值,希望子组件监听modelList的变化(子组件使用了深度监听,deep:true,immediate:true)

// 改变父组件数据中的值
this.modelList[0] = this.data
// 子组件监听
    'modelList':{
      handler(newVal, oldVal){
        if (newVal) {
          console.log(newVal) // 根本监听不到
        }
      },
      immediate:true,
      deep: true
    }

原因:无法侦听数组及对象属性的变化
解决:

// 使用$set
this.$set(this.modelList, 0, this.data)
this.modelList[0].children.map((i,index)=>{     this.$set(this.modelList[0],index,this.data.children[index])
})

这种写法虽然看起来不是最好的解决方法,但是在我一直由于无法监听父组件的值而苦恼的时候这个方法解决了我的问题
this.$set原理参考:https://blog.csdn.net/XuM222222/article/details/99942522
问题解决参考:https://www.jb51.net/article/190991.htm(之前找到的记不得了,临时找了这个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值