Vuejs學(xué)習(xí)筆記

最近聽說某個(gè)朋友的移動(dòng)視頻直播的項(xiàng)目使用了vuejs,我就動(dòng)了學(xué)習(xí)vuejs的念頭。

下面是學(xué)習(xí)筆記,留待以后使用的時(shí)候做個(gè)索引。

Vue.js 的核心是一個(gè)響應(yīng)的數(shù)據(jù)綁定系統(tǒng),它讓數(shù)據(jù)與 DOM 保持同步非常簡單。

看過了vuejs的文檔,發(fā)現(xiàn)和angularjs很相似的,都是MVVM架構(gòu)。

MVVM,MVC的C變成了VM-VewModel。ViewModel在View和Model之間充當(dāng)中介者,view的變化被DOM Listeners發(fā)現(xiàn)以后寫入model中,model中的變化被viewmodel中的數(shù)據(jù)綁定刷新到view中。

組件系統(tǒng)是 Vue.js 另一個(gè)重要概念。

Vue.js 組件非常類似于自定義元素——它是Web?Component規(guī)范的一部分。實(shí)際上 Vue.js 的組件語法參考了該規(guī)范。例如 Vue 組件實(shí)現(xiàn)了Slot API與is特性。但是,有幾個(gè)關(guān)鍵的不同:

Web 組件規(guī)范仍然遠(yuǎn)未完成,并且沒有瀏覽器實(shí)現(xiàn)。相比之下,Vue.js 組件不需要任何補(bǔ)丁,并且在所有支持的瀏覽器(IE9 及更高版本)之下表現(xiàn)一致。必要時(shí),Vue.js 組件也可以放在原生自定義元素之內(nèi)。

Vue.js 組件提供了原生自定義元素所不具備的一些重要功能,比如組件間的數(shù)據(jù)流,自定義事件系統(tǒng),以及動(dòng)態(tài)的、帶特效的組件替換。

? 組件間的數(shù)據(jù)流? ? ? ??

? ? ? ? ?父組件可以通過props把數(shù)據(jù)傳給子組件,? ? ? ??

? ?自定義事件系統(tǒng)? ??

? ? ? ? ? 每個(gè) Vue 實(shí)例都是一個(gè)事件觸發(fā)器:? ??

? ? ? ? ? ? ? ? ? ?使用$on()監(jiān)聽事件;? ? ? ??

? ? ? ? ? ? ? ? ? ?使用$emit()在它上面觸發(fā)事件;? ? ? ??

? ? ? ? ? ? ? ? ? ?使用$dispatch()派發(fā)事件,事件沿著父鏈冒泡;? ? ? ??

? ? ? ? ? ? ? ? ? ?使用$broadcast()廣播事件,事件向下傳導(dǎo)給所有的后代。? ??

? ? ?動(dòng)態(tài)組件? ? ? ??

? ? ? ? ? ? 多個(gè)組件可以使用同一個(gè)掛載點(diǎn),然后動(dòng)態(tài)地在它們之間切換。使用保留的元素,動(dòng)態(tài)地綁定到它的 is 特性


深入響應(yīng)式原理

? 如何追蹤變化

? ? ?data對象的setter/getter

? ? ?模板每個(gè)指令/數(shù)據(jù)綁定都有一個(gè)watcher,watcher會(huì)檢查依賴屬性,一旦屬性的setter被調(diào)用,就會(huì)觸發(fā)watcher的官僚指令-重新計(jì)算/更新DOM

? data對象的動(dòng)態(tài)添加/刪除屬性

? ? ? ?通過全局方法Vue.set(data,key, value)或者實(shí)例方法vm.$set(key, value)

? ? ? ? 但是不建議這么做,推薦在 data 對象上聲明所有的響應(yīng)屬性,僅僅是動(dòng)態(tài)的修改屬性的值,這樣對性能比較好。

? ? 異步更新隊(duì)列

? ? ? ?vuejs中的nextTick

? ? ? ? ? ?延遲回調(diào)在下次DOM 更新循環(huán)之后執(zhí)行,同樣的watcher即使被多次觸發(fā)也只會(huì)在隊(duì)列中出現(xiàn)一次。

? ? ? ? ? 看到這個(gè)我想起了window.requestNextAnimationFrame函數(shù)。

自定義指令,自定義過濾,混合這些話題很重要,但是我不再描述。

生態(tài)系統(tǒng)(包括各種工具鏈,框架和插件)

組件系統(tǒng)是用 Vue.js 構(gòu)建大型應(yīng)用的基礎(chǔ)。另外,Vue.js 生態(tài)系統(tǒng)也提供了高級工具與多種支持庫,它們和 Vue.js 一起構(gòu)成了一個(gè)更加“框架”性的系統(tǒng)。這些工具鏈在構(gòu)建大型應(yīng)用中也起到了很大的作用。

? 我想要一個(gè)最初始的boilerplate -- vue-cli

? ? ? ? 你還可以自定義模板,寫好骨架以后上傳到github上面,以后就可以使用自定義模板生成項(xiàng)目的boilerplate了。

? ?我想要類似angular中ui-router的東西 -- vue-router

? ?我想要angular中$http的東西 -- vue-resource

? ?我想要用sass或者stylus -- 在vue.js中好方便,在component定義文件中可以直接使用各種css預(yù)處理語言

? ?我想要類似flux,redux的數(shù)據(jù)流 -- vuex

? ?我想要用sublime或者webstorm作為開發(fā)工具 --都有相應(yīng)的插件,最新的webstorm2016.1.1可以使用babel作為vue文件的watcher

? 另外可能用得到的插件

? ? ?vue-async-data:異步加載數(shù)據(jù)插件。

? ? ?vue-validator:表單驗(yàn)證插件。

? ? ?vue-devtools:Chrome 開發(fā)者工具擴(kuò)展,用于調(diào)試 Vue.js 應(yīng)用。

? ? ?vue-touch:使用 Hammer.js 添加觸摸手勢指令。

? ? ?vue-element:使用 Vue.js 注冊自定義元素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容