Vuejs vm對象詳解


Vuejs vm對象詳解

vue數據是怎么驅動視圖的?
一堆數據放在那里是不會有任何作用的,它必須通過我們的View Model(視圖模型)才能操控視圖。

圖中的model其實就是數據,一般我們寫成js對象的格式;

中間的這個所謂View Model,就是

var vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
我們把數據放到了vm里,然后把各種directive放到視圖里,這樣我們就可以以vm為媒介,通過改變數據來改變視圖。

vm這個對象有哪些屬性和方法

我們看到

var vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
誤區

vm實際上是Vue這個類的一個實例,非常容易混淆的是,你會很容易的以為

vm.el == '#app';
vm.data== {
message: 'Hello Vue!'
};
vm.data.message =='Hello Vue!';
實際上這都是錯誤的,

{
el: '#app',
data: {
message: 'Hello Vue!'
}
}
這只是傳進 Vue()的一個參數,它可不是vm本身

通過vm讀取數據

實際上,vm.messasge == 'Hello Vue!', vm的屬性是直接跟數據的key綁定的(至於怎樣綁定的現在不用管),這是一種代理屬性;

這個數據是響應式(reactive)的

var data = { a: 1 }
var vm = new Vue({
data: data
})
vm.a === data.a // -> true
// 設置vm數據會使原來的數據發生改變
vm.a = 2
data.a // -> 2
// ... 反過來亦然
data.a = 3
vm.a // -> 3
怎么通過vm獲取其他屬性

vm.el == '#app';
vm.data== {
message: 'Hello Vue!'
};
vm.data.message =='Hello Vue!';
以上雖然是錯誤的寫法,有時候我們還是希望獲得這些屬性的,通過vm你需要這樣寫:

vm.$el === document.getElementById('app') // -> true
vm.$data === data // -> true
vm.$data.message ==='Hello Vue!' // -> true
這個$符代表的就是vm的真實屬性了。

詳細其他屬性的請查閱文檔Api

不僅有屬性,還有方法

vm.$watch('a', function (newVal, oldVal) {
// 當vm.a發生改變的時候,這個回調函數將會被觸發
})
詳細其他方法,請查閱文檔Api

vm對象的生命周期

一個對象的生成和銷毀都是有生命周期的,這個周期中有很多事件點,供我們插入邏輯代碼;

生命周期事件,怎么插入事件回調呢?

var vm = new Vue({
data: {
a: 1
},
created: function () {
// `this` points to the vm instance
console.log('a is: ' + this.a)
}
})
// -> "a is: 1"
直接把事件名當做一個屬性,然后加匿名回調函數即可。

vue生命周期圖示中英文版Vue實例生命周期鈎子 - 流風,飄然的風 - 博客園
https://www.cnblogs.com/zdz8207/p/vue-lifecycle.html

 


免責聲明!

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



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