Zi 字媒體
2017-07-25T20:27:27+00:00
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:
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)
{{ message }}
const app = new Vue({
// 設定 Element
el: '#app',
// Set Data
data: {
message: 'Hello Vue!'
}
});
Categories: Vue
Tags: javascriptVue
分類
Android
AngularJS
API Blueprint
Chrome
Database
MySQL
DataStructure
Docker
Editor
Vim
Firefox
Git
GitLab
Google API
Hadoop
Language
Go
Java
JavaScript
jQuery
jQueryChart
Node.js
Vue
PHP
Laravel
ZendFramework
Python
Mac
Network
Cisco
DLink
Juniper
Oauth
Server
Apache
Share
Unix
FreeBSD
Linux
WebDesign
Bootstrap
CSS
HTML
Wordpress
Search
搜尋關鍵字:
寫了
5860316篇文章,獲得
23313次喜歡