Vue的data是一個對象,它是Vue組件的響應式數據源。在Vue組件中,我們可以在data對象中聲明任何屬性,這些屬性可以通過this訪問,也可以在模板中用Mustache語法(雙大括號)渲染出來。但是要注意,如果我們想在模板中渲染出data中的屬性值,該屬性必須事先聲明在data對象中。
var vm = new Vue({ data: { message: 'Hello Vue!' } }) console.log(vm.message) // 輸出 'Hello Vue!'
當data對象中的某個屬性的值發生變化時,Vue會立即更新視圖以反映這些變化。一個重要的事情是,只有在實例被創建時data中存在的屬性才是響應式的。
var vm = new Vue({ data: { message: 'Hello' } }) vm.message = 'Hello Vue!' console.log(vm.message) // 輸出 'Hello Vue!'
注意,如果你嘗試更改一個不存在于data中的屬性,這個新值不會觸發視圖的重新渲染。
// 示例1: // 'msg'不會觸發視圖更新 var vm = new Vue({ data: { message: 'Hello' } }) vm.msg = 'world' // 示例2: // 數組中的值變化不會觸發視圖更新 var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) vm.items.push('d') // 示例3: // 對象中的值變化不會觸發視圖更新 var vm = new Vue({ data: { obj: { foo: 'bar' } } }) vm.obj.baz = 'qux'
如上面的示例,'msg'屬性、數組和對象的變化都不會觸發視圖的重新渲染。這是因為它們并沒有在實例創建時被聲明在data中,Vue就沒有監聽它們。如果我們確實需要在運行時動態添加一個響應式屬性,可以使用Vue.set方法將這個屬性變成響應式的。
var vm = new Vue({ data: { obj: {} } }) Vue.set(vm.obj, 'baz', 'qux') // 或者 vm.$set(vm.obj, 'baz', 'qux')
如此一來,'baz'屬性的變化就可以觸發視圖的重新渲染了。
總的來說,Vue的data對象是一個非常方便的響應式數據源,在編寫組件時可以幫助我們輕松地管理組件的狀態。
上一篇vue彈出form窗口
下一篇vue的filter方法