Vue.js 2 渐进式前端框架 的最佳学习方法
Vue.js作為一個后起的前端框架,借鑒了Angular 、React等現代前端框架/庫的諸多特點,并且
取得了相當不錯的成績。
Vue.js的定位是一個漸進式框架,作者的說法是:
與其他框架的區別就是漸進式的想法,也就是Progressive——這個詞在英文中定義是漸進,
一步一步,不是說你必須一竿子把所有的東西都用上。
這或許是Vue.js受到越來越多關注的一個重要原因:你只需要具備基本的HTML/JavaScript/CSS
基礎,就可以快速上手,讓你用上這些現代Web開發中的先進技術來提高你的生產力:
響應式編程、聲明式渲染、組件化開發、虛擬DOM、跨平臺支持…
盡管Vue.js缺少令人眼前一亮的獨創性前端開發理念,但它集中實現了最近幾年前端領域技術
大躍進的諸多新理念、新技術。或許你認為這些創新起源于Angular、React或者Knockout,
但Vue.js可以無縫引導大量jQuery時代的前端工程師進入新的時代,這也是一個相當值得稱贊的
巨大的成果。
與Angular和React出自巨型公司不同,Vue.js基本上是以作者(尤雨溪/Evan YOU)一己之力
完成。這或許部分解釋了漸進式這一思路的來源:軟件的第一使用者是其作者。
因此Vue.js更適合個人或小型團隊上手 —— 你沒有那么多的精力,一開始就考慮構建工具鏈、
測試等諸多問題。你迫切需要的,是高效地生產出,你的用戶需要的產品或服務。
不過漸進式意味著Vue.js沒有局限于小型應用的開發:你一樣可以使用ES2015、使用構建
工具鏈、使用集中狀態管理這些來開發大規模項目。只是,Vue.js允許你把這些東西的學習和應用,
在稍晚一些的時候引入,而不是必須先學習很多新東西才能上手。
1.Hello Vue.js 2
和其他現代前端框架一樣,Vue.js也是以JavaScrip作為應用的入口,HTML只是提供一個渲染
的錨點 —— 這便利于Vue.js遷移到瀏覽器之外的其他平臺,比如移動設備,或者服務器。
創建一個Vue.js的Hello World示例相當簡單:
1、引入vue.js庫
<script src="lib/vue.js"></script>這將暴露出一個全局類——Vue,你可以用它來創建一個Vue實例。
2、創建Vue實例
Vue是一個封裝了響應式開發、模板編譯等諸多特性的基礎類,你通過提供一些
配置項,來創建一個實例:
一個常見的配置項是template,以類似HTML的語法來編制視圖的結構:
var vm = new Vue({template: '<h1>Hello,Vue.js 2</h1>' })3、渲染Vue實例
要將Vue實例渲染到HTML頁面中,采用Vue實例的$mount()方法,這個方法
的名稱,意味著渲染實際上是將Vue實例生成的(虛擬)DOM子樹,掛接到頁面DOM中。
容易理解,$mount()方法需要指定一個定位用的DOM節點———錨點:
vm.$mount(anchor_element);Vue.js會將渲染出的DOM子樹,插入錨點元素之前(并最終刪除這個錨點元素)。
可以使用CSS選擇符或者指定一個HTMLElement來聲明錨點。例如,
下面的示例將Vue實例掛接到id為app的DOM對象處:
2.使用隱式渲染
在前面的示例中,我們使用Vue實例的$mount()方法來顯式地啟動Vue實例
的渲染。
實際上,Vue.js也提供了一個實例化時的配置項el,來允許我們隱式地啟動
Vue實例的渲染。el用來聲明目標渲染錨點,例如:
工作原理
如果Vue.js檢測到你指定了el配置項,將在內部自動地執行渲染 —— 這時你
不再需要額外調用$mount()方法了:
我們看到的大部分Vue.js示例代碼,通常都會采用這種隱式渲染的寫法。不過我認為
在開始學習時,使用儀式感更強的$mount()方法,會讓你更多一點理解Vue.js
的設計思想。
3.使用HTML模板
在創建Vue實例時,如果聲明了el配置項,那么你也可以省略template
選項。這時候,Vue.js將提取錨點元素的HTML內容,做為模板。
我們可以使用單一的el配置項來創建Vue實例:
var vm = new Vue({el:'#app'});在Vue.js中,這種模板被稱為HTML模板,而使用template配置項
書寫的模板,被稱為字符串模板。
工作原理
當Vue.js發現你提供的選項中沒有template屬性時,將提取el屬性所
指定的DOM節點的outerHTML內容作為模板內容。這類似于:
Vue.js支持使用HML模板,可能一方面源于早期AugularJS的影響,另一方面
可能在于,在HTML文件中書寫模板,還是比在JavaScript中寫字符串來的自然。
4.模型聲明與綁定
模板的存在的唯一目的,是為了和數據綁定。
Vue.js在標準HTML語法基礎上,增加了一些擴展的語法來聲明數據的綁定。
數據綁定語法
在Vue.js的模板中,最常見的一種數據綁定語法,是使用模板引擎Mustache
的插值寫法:{{}}。例如,下面的模板綁定了實例上下文中的name變量:
當Vue.js渲染此模板時,將使用實例數據上下文中的name變量值,來計算最終的
渲染結果。
數據模型聲明
在創建Vue實例時,使用data配置項來聲明Vue實例的數據模型。
例如,下面的示例創建了一個具有初始模型{name:'Elthon John'}的Vue實例:
var vm = new Vue({template:'<h1>{{name}}</h1>',data:{name:'Elton John'},el:'#app' })Vue.js根據data配置項聲明的初始模型構造數據上下文,進而和template配置項
所聲明的模板執行綁定,因此,上面示例的最終渲染結果是:<h1>Elton John</h1>。
5.模板的數據上下文
由于通常使用data配置項來聲明Vue實例的數據模型,這容易讓我們誤以為
只有在data對象上聲明的數據才可以與模板綁定。
當然不是這樣,模板的數據上下文 = Vue實例對象。
當Vue.js創建一個Vue實例時,它會將data配置項的每個根屬性,(經過若干處理后)
添加為實例的根屬性。
因此,實際上我們可以在模板中綁定實例的任意屬性。例如:下面的模板可以輸出
$mount()方法的源代碼:
既然如此,我們為什么需要使用data配置項來聲明數據模型,而不是直接
在實例上設置數據模型呢?例如,下面的代碼有什么問題呢?
這關乎Vue.js的一個核心特性 ———— 響應式計算。
6.響應式計算機制
響應式計算是一種面向變化傳播的編程范式,響應式計算模型主要包括
兩個部分:數據源和(依賴于數據源的)計算過程。當數據源發生變化時,
將自動執行計算過程(比如視圖的渲染過程):
雖然響應式計算本質上是一種通用的編程范式,但這種模型最初就是為了簡化交互
式用戶界面的創建和實時系統動畫的繪制而提出來的一種方法,它使得我們只需要修改
數據源就可以自動更新用戶界面。
Vue.js內部實現了響應式計算框架,我們在創建Vue實例時,在data配置項中聲明的數據,
會被自動轉換為響應式數據源,當我們修改這部分數據時,依賴于這部分數據的
計算過程 —— 例如界面渲染過程 —— 將自動被執行,因此用戶界面也自動更新。
例如,對于下面的Vue實例:
new Vue({template:'<h1>{{counter}}</h1>',data: { counter: 0} })Vue.js將自動建立如下的響應式計算模型:
你看到,渲染計算依賴于Vue實例的counter,因此,當counter變化時,
我們將自動得到刷新的DOM視圖。
7.交互行為聲明
視圖的作用是雙向的,除了向用戶展示信息,另一方面的用途在于采集用戶的輸入。
和數據綁定類似,Vue.js通過擴展模板的HTML語法,來聲明對用戶交互事件
的監聽。例如,下面的模板向Vue.js框架聲明了對button元素的click
事件的監聽:
容易注意到button元素的特殊屬性:v-on:click。在Vue.js中,這種以
v-為前綴的特殊的HTML屬性,被稱為指令,通常用來增強或改變所在
HTML元素的行為。例如,v-on指令的作用,就是為宿主元素(在這里是button)
聲明事件監聽:
類似于Vue.js中的其他指令,v-on指令包括以下幾個部分:
- 指令名稱 —— v-開始、:或=之前的部分稱為指令名稱。在上圖中,指令
名稱是v-on。 - 指令參數 —— :之后的部分稱為指令的參數。在上圖中,指令參數是:click。
不是所有的Vue.js的指令都 需要參數,但是對于v-on指令而言,使用參數可以
避免為不同的事件實現不同的指令,例如,我們可以同樣方式聲明對hover事件的
監聽:v-on:hover="..."。 - 指令的值 —— =之后的字符串稱為指令的值。在上圖中,指令的值是:counter=0。
不同的指令,對指令值有不同的解釋。對于v-on指令,它的值表示當事件發生時
應當執行的表達式。
指令值的執行上下文
模板的數據上下文是所屬的Vue實例對象。容易理解,v-on指令的值表達式執行
的上下文也是所屬的Vue實例對象,因此,在下面的示例中,當點擊按鈕后,Vue實例
的counter屬性將復位為0:
簡化寫法
為了避免大量書寫v-on:前綴,Vue.js允許我們使用@來簡化事件綁定的聲明語法。
例如,下面的兩種聲明是完全等效的:
8.實例方法聲明
如果需要在點擊鼠標時,執行一個復雜的操作,那么采用單一的表達式
作為v-on指令值就不夠了 —— 我們需要將復雜的操作封裝為Vue實例的
一個方法,然后將v-on指令的值設置為這個方法。
使用methods配置項來聲明Vue實例的方法。當Vue.js創建一個Vue實例時,
會將methods配置項中聲明的方法,掛接到Vue實例對象上:
實例方法可以直接通過實例對象調用,例如,對于上圖中的vm實例:
vm.handler(); //正確實例方法另一個常見的用途,是將方法名聲明為v-on指令的值,當事件
觸發時將調用該實例對象上該名稱的方法。例如,下面的代碼為Vue實例聲明
了reset方法,并將其名稱作為模板中button元素的v-on指令的值:
方法函數體內的this對象
需要指出,在methods配置對象中聲明的方法,其函數實現體內,this總是
指向所在的Vue實例。所以,可以在這些函數體內,直接訪問通過data配置項聲明
的數據,比如this.counter。
9.生命周期鉤子
每個 Vue 實例在被創建之前都要經過一系列的初始化過程。在這個過程中,實例也會
調用一些生命周期鉤子(Lifecycle Hook) ,這就給我們提供了執行自定義邏輯
的機會。
初始化鉤子
初始化鉤子包括beforeCreate和created。這兩個鉤子允許我們在實例被渲染
到DOM之前執行一些初始化操作。由于DOM還未就緒,在初始化鉤子里,不能訪問DOM
對象,實例的$el屬性 —— 宿主DOM對象 —— 也沒有創建:
beforeCreate是最早被調用的鉤子,這時Vue.js還沒有構造響應式數據源,也沒
有初始化實例的事件。
在created鉤子里,我們可以訪問響應式數據、監聽實例事件。不過還沒有將虛擬
DOM渲染到文檔DOM樹。
DOM掛載鉤子
掛載鉤子包括beforeMount和mounted,是最常使用的鉤子。這兩個鉤子允許我們
在首次渲染*前后立即訪問Vue實例。因此,如果我們需要在首次渲染前后訪問或修改
DOM對象(例如,通過實例的$el屬性訪問宿主元素),就應該使用這兩個鉤子:
beforeMount鉤子在模板編譯完成后、首次渲染前執行。
在mounted鉤子內可以自由地訪問組件渲染后的DOM對象(this.$el)。這個鉤子
經常被用于修改DOM、集成第三方庫等操作。
更新鉤子
更新鉤子包括beforeUpdate和updated。每當實例需要重新渲染(例如模型發生變化等),
框架就會調用這兩個鉤子:
beforeUpdate鉤子在模型數據變化之后、渲染周期開始之前執行。在這個鉤子里我們可以
在界面渲染前獲取實例屬性的最新值。
updated鉤子在重新渲染完成后被調用。
DOM卸載鉤子
DOM卸載鉤子包括beforeDestroy和destroyed,當實例被從DOM樹移除時執行。
這兩個鉤子允許我們在實例銷毀前后執行一些清理或統計分析的工作:
beforeDestroy鉤子在實例被銷毀(利用,通過調用實例的$destroy()方法)之前被調用。
在這個鉤子里可以清理對響應式數據的監聽。
destroyed鉤子在實例被銷毀之后被調用,此時實例已經不剩什么東西了:-( 也可以
在這個鉤子里執行一些最后時刻的清理工作,或者向遠程服務器通知實例被銷毀的消息。
大量相關的示例、練習和更多內容在這里:
http://xc.hubwiz.com/course/592ee9b2b343f27b0ae1ba99
vuex 2
http://xc.hubwiz.com/course/597d463fff52d0da7e3e397a
vuerouter 2
http://xc.hubwiz.com/course/5983d3aeff52d0da7e3e3d50
總結
以上是生活随笔為你收集整理的Vue.js 2 渐进式前端框架 的最佳学习方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javaweb 项目内所有页面都是404
- 下一篇: WPF的Clipboard.SetTex