1. 程式人生 > >Vue computed結合watch監聽物件其一屬性值的變化

Vue computed結合watch監聽物件其一屬性值的變化

var vm=new Vue({
  data:{
    a:1,
    b:{
      c:1
    }
  },
  watch:{
    a(val, oldVal){//普通的watch監聽
      console.log("a: "+val, oldVal);
    },
    b:{//深度監聽,可監聽到物件、陣列的變化
      handler(val, oldVal){
        console.log("b.c: "+val.c, oldVal.c);//但是這兩個值打印出來卻都是一樣的
      },
      deep:true
    }
  }
})
vm.a=2
vm.b.c=2

a是一個普通的值,當a的值變化時會被監聽到,b是一個物件,不能直接像a那麼寫,需要深度監聽才能捕捉到,但是當我想去捕捉b物件中某一個值的變化時卻發現,打印出來的兩個值是不一樣的

 這樣就只能知道物件發生變化卻不知道具體哪個值發生了變化,

如果想監聽物件某一個值得變化可以利用計算屬性computed。

用watch去監聽computed計算過的值就可以直接知道是哪個對應的值發生了變化

var vm=new Vue({
  data:{
    b:{
      c:1
    }
  },
  watch:{
    newValue(val, oldVal){
      console.log("b.c: "+val, oldVal);
    }
  },
  computed: {
    newValue() {
      return this.b.c
    }
  }
})
vm.b.c=2