Vue.set 向響應式對象中添加響應式屬性,及設置數組元素觸發視圖更新


一、為什么需要使用Vue.set?

  vue中不能檢測到數組和對象的兩種變化:

  1、數組長度的變化 vm.arr.length = 4

  2、數組通過索引值修改內容 vm.arr[1] = ‘aa’

  Vue.$set(target,key,value):可以動態的給數組、對象添加和修改數據,並更新視圖中數據的顯示。

  vue在構造函數new Vue()時,就通過Object.defineProperty中的getter和setter 這兩個方法,完成了對數據的綁定。所以直接通過vm.arr[1] = ‘aa’的方法,無法修改值去觸發vue中視圖的更新,必須還得通過Object.defineProperty的方法去改變,而Vue.$set()就封裝了js底層的Object.defineProperty方法。

  所以我們需要利用Vue.set() 響應式新增與修改數據。

二、Vue.set使用

  Vue不能檢測到對象屬性的添加或刪除。

  由於Vue會在初始化實例時對屬性執行getter/setter轉化過程,所以屬性必須在data對象上存在才能讓Vue轉換它,這樣才能是響應式的。例如:

data () { return { form: { total: 10 } } } // this.form.total是響應式的 // 若直接增加屬性,是非響應式的
this.form.showFlag= true  //非響應式的

  使用Vue.set(object, key, value)方法將響應屬性添加到嵌套的對象上。Vue.set(this.form, 'showFlag', true)

  還可以使用vm.$set實例方法,這也是全局Vue.set方法的別名:this.$set(this.form, 'showFlag', true)

  這樣,this.form.showFlag 就是響應式的了。

  Vue.set(target, key/index, value) 向響應式對象中添加一個屬性,並確保這個新屬性同樣是響應式的,且觸發視圖更新。它必須用於向響應式對象上添加新屬性,因為 Vue 無法探測普通的新增屬性 (比如 this.obj.newProperty = 'hi')

  官方文檔:https://cn.vuejs.org/v2/api/#Vue-set

Vue.set( target, propertyName/index, value )

  • 參數

    • {Object | Array} target
    • {string | number} propertyName/index
    • {any} value
  • 返回值:設置的值。

  • 用法

    向響應式對象中添加一個屬性,並確保這個新屬性同樣是響應式的,且觸發視圖更新。它必須用於向響應式對象上添加新屬性,因為 Vue 無法探測普通的新增屬性 (比如 this.myObject.newProperty = 'hi')

    注意對象不能是 Vue 實例,或者 Vue 實例的根數據對象。意思是,set 這個方法只能用於data 里面的子數組對象,而不能直接用於data (這個根數據)或者vue 實例

var vm = new Vue({ el:"#div", data: { items: ['a', 'b', 'c'] } }); Vue.set(vm.items,2,"ling")

  設置數組元素:Vue.set(vm.items, 2, "ling") 表示把 vm.items  這個數組的下標為2 的元素,改為"ling",把數組  ["a","b","c"] 修改后是 ["a","b","ling"]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM