1. 程式人生 > 實用技巧 >Vue 資料相關例項方法vm.$watch、vm.$set、vm.$delete

Vue 資料相關例項方法vm.$watch、vm.$set、vm.$delete

資料相關例項方法:

vm.$watch

觀察vue例項變化的一個表示式或計算屬性函式。回撥函式得到的引數為新值和舊值。表示式只接受監督的鍵路徑。對於更復雜的表示式,用一個函式取代。

//寫法一:
this.$watch('a.b.c', function (newVal, oldVal) {})

//寫法二:
watch:{
    a:function(val,oldVal){},
    "a.b":{
          handler:function(newVal,oldVal){},
          deep:true//如果監聽的是一個物件,物件內部值發生變化,需要設定deep=true;
} }

vm.$set

向響應式物件中新增一個屬性,並確保這個新屬性同樣是響應式的,且觸發檢視更新

語法:vm.$set( target,key,value )

對於物件,propterty必須在data物件上存在才能讓Vue將它轉換為響應式的

var vm = new Vue({
    data:{
        a:1
      }
})
vm.a = 1  // 響應式的
vm.b = 2  // 非響應式的
//Vue不允許新增根級別的響應式屬性,但是可以使用
this.$set(this.someObject, "b", 2)||Vue.set(vm.someObject, "b" ,2)

對於陣列,Vue不能檢測以下陣列的變動

var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是響應性的
vm.items.length = 2 // 不是響應性的
this.Sset(this.items,1,"x");//處理方法

vm.$delete

刪除物件的屬性,如果物件是響應式的,確保刪除能觸發更新檢視。這個方法主要用於避開vue不能檢測到屬性被刪除的限制。

語法:vm.$delete(target,key)

this.$set(this.someObject, "b"
, 2)