Getting Started with Vue
Vue:2.5
Vue 是目前前端框架三巨頭之一,好處非常多,除了學習曲線相較其他兩套低之外,Laravel 這套 PHP Framework 更在 5 之後預設把 Vue 納進其中。因此在面對不同類型的專案,Vue 就顯得更為彈性。
但在開始使用 Vue 之前,必須先瞭解它的運作方法及架構,這樣才能真正知道這套 Framework 適不適合自己使用。
MVVM
Vue 的架構設計是採用 MVVM 模式。
(圖片來源:Microsoft)
MVVM 由 Model、View、ViewModel 三個部份組合而成。Model 代表的是資料層,可以在 Model 中定義資料修改和商業邏輯、View 代表網頁上的 UI 元件,它負責將資料轉換成 UI 呈現在網頁上,而 ViewModel 介於兩者之間,負責同步 View 及 Model 。
透過 ViewModel,只要 Model 或 View 有任何修改,就可以即時反應給對方,不需要任何手動操作 DOM 等等的人為干涉,就可以達到 Two-Way-Binding 的效果。
Vue Instance
一個完整使用 Vue 的應用,是一個 Vue Instance 掛上好多個 Components 所完成的。
(圖片來源:Composing with Components)
既然是 Instance,那就會有它的 Lifecycle。
(圖片來源:Lifecycle Diagram)
Virtual DOM(vNode)
在網頁上,如果任何操作都直接在 DOM 上調整,其實是非常花效能的。Virtual DOM 是以 Javascript 物件模擬 DOM 的結構去產生的樹狀結構,前端操作過程中的任何更動,都只改這份模擬物件的結構就好,最後根據 diff 再一次把修改的部份更新到真正的 DOM 上,這樣一來在大部份狀況下,效能就可以提昇許多。
而 Virtual DOM 在 Vue 實作就叫 VNode。
(圖片來源:aooy/blog)
詳細做 diff 的過程可以參考 解析 Vue 2.0的 diff 算法。
Usage
在瞭解 Vue 的架構之後,可以開始試著完成幾個實作。
在這之前必須先引入 Vue:
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
Lifecycle test
const vm = new Vue({
beforeCreate: function() {
// Vue Instance 被 Vue Constructor 建立前
console.log('beforeCreate');
},
created: function() {
// Vue Instance 已建立
// Data Binding 完成
console.log('created');
},
beforeMount: function() {
// Mount DOM 之前
console.log('beforeMount');
},
mounted: function() {
// DOM Mounted
console.log('mounted');
},
beforeUpdate: function() {
// 資料更新,但還沒更新 DOM
console.log('beforeUpdate');
},
updated: function() {
// DOM 更新完成
console.log('updated');
},
beforeDestroy: function() {
// 刪除 Vue Instance 之前
console.log('beforeDestroy');
},
destroyed: function() {
// 刪除 Vue Instance 之後
console.log('destroyed');
}
});
Two-Way-Binding(v-model)
<div id="app">
<!-- Display -->
{{ message }}
<!-- Two-Way-Binding -->
<input v-model="message">
</div>
const app = new Vue({
// 設定 Element
el: '#app',
// Set Data
data: {
message: 'Hello Vue!'
}
});