溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vue.js核心的示例分析

發(fā)布時間:2020-11-23 13:59:01 來源:億速云 閱讀:170 作者:小新 欄目:web開發(fā)

小編給大家分享一下vue.js核心的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Vue.js是一個提供MVVM數(shù)據(jù)雙向綁定的庫,專注于UI層面,核心思想是:數(shù)據(jù)驅(qū)動、組件系統(tǒng)。

數(shù)據(jù)驅(qū)動:

Vue.js數(shù)據(jù)觀測原理在技術(shù)實現(xiàn)上,利用的是ES5Object.defineProperty和存儲器屬性: getter和setter(所以只兼容IE9及以上版本),可稱為基于依賴收集的觀測機制。核心是VM,即ViewModel,保證數(shù)據(jù)和視圖的一致性。

watcher:每一個指令都會有一個對應(yīng)的用來觀測數(shù)據(jù)的對象,叫做watcher,比如v-text="msg", {{ msg }},即為兩個watcher,watcher對象中包含了待渲染的關(guān)聯(lián)DOM元素。

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

基于依賴收集的觀測機制原理:

1 將原生的數(shù)據(jù)改造成 “可觀察對象”,通常為,調(diào)用defineProperty改變data對象中數(shù)據(jù)為存儲器屬性。一個可觀察對象可以被取值getter,也可以被賦值setter。

2 在解析模板,也就是在watcher的求值過程中,每一個被取值的可觀察對象都會將當(dāng)前的watcher注冊為自己的一個訂閱者,并成為當(dāng)前watcher的一個依賴。

3 當(dāng)一個被依賴的可觀察對象被賦值時,它會通知notify所有訂閱自己的watcher重新求值,并觸發(fā)相應(yīng)的更新,即watcher對象中關(guān)聯(lián)的DOM改變渲染。

依賴收集的優(yōu)點在于可以精確、主動地追蹤數(shù)據(jù)的變化,不需要手動觸發(fā)或?qū)ψ饔糜蛑兴衱atcher都求值(angular臟檢查實現(xiàn)方式的缺點)。特殊的是,對于數(shù)組,需要通過包裹數(shù)組的可變方法(比如push)來監(jiān)聽數(shù)組的變化。在添加/刪除屬性,或是修改數(shù)組特定位置元素時,也需要調(diào)用特定的函數(shù),如obj.$add(key, value)才能觸發(fā)更新。這是受ES5的語言特性所限。

組件系統(tǒng):

應(yīng)用類UI可以看作全部是由組件樹構(gòu)成的。

注冊一個組件:

Vue.component('my-component', {
    // 模板
    template: '<div>{{msg}} {{privateMsg}}</div>',
    // 接受參數(shù)
    props: {
        msg: String    
    },
    // 私有數(shù)據(jù),需要在函數(shù)中返回以避免多個實例共享一個對象
    data: function () {
        return {
            privateMsg: 'component!'
        }
    }
})
<my-component msg="hello"></my-component>

組件的核心選項

1 模板(template):模板聲明了數(shù)據(jù)和最終展現(xiàn)給用戶的DOM之間的映射關(guān)系。

2 初始數(shù)據(jù)(data):一個組件的初始數(shù)據(jù)狀態(tài)。對于可復(fù)用的組件來說,這通常是私有的狀態(tài)。

3 接受的外部參數(shù)(props):組件之間通過參數(shù)來進(jìn)行數(shù)據(jù)的傳遞和共享。

4 方法(methods):對數(shù)據(jù)的改動操作一般都在組件的方法內(nèi)進(jìn)行。

5 生命周期鉤子函數(shù)(lifecycle hooks):一個組件會觸發(fā)多個生命周期鉤子函數(shù),最新2.0版本對于生命周期函數(shù)名稱改動很大。

6 私有資源(assets):Vue.js當(dāng)中將用戶自定義的指令、過濾器、組件等統(tǒng)稱為資源。一個組件可以聲明自己的私有資源。私有資源只有該組件和它的子組件可以調(diào)用。

Webpack是一個開源的前端模塊構(gòu)建工具,它提供了強大的loader API來定義對不同文件格式的預(yù)處理邏輯,這是.vue后綴單文件組件形式的基礎(chǔ)。所以在此基礎(chǔ)上,尤大開發(fā)的vue-loader允許將模板、樣式、邏輯三要素整合在同一個文件中,以.vue文件后綴形成單文件組件格式,方便項目架構(gòu)和開發(fā)引用。

其他特性:

1 異步批量DOM更新:當(dāng)大量數(shù)據(jù)變動時,所有受到影響的watcher會被推送到一個隊列中,并且每個watcher只會推進(jìn)隊列一次。這個隊列會在進(jìn)程的下一個 tick異步執(zhí)行。這個機制可以避免同一個數(shù)據(jù)多次變動產(chǎn)生的多余DOM操作,也可以保證所有的DOM寫操作在一起執(zhí)行,避免DOM讀寫切換可能導(dǎo)致的layout。

2 動畫系統(tǒng):Vue.js提供了簡單卻強大的動畫系統(tǒng),當(dāng)一個元素的可見性變化時,用戶不僅可以很簡單地定義對應(yīng)的CSS Transition或Animation效果,還可以利用豐富的JavaScript鉤子函數(shù)進(jìn)行更底層的動畫處理。3 可擴展性:除了自定義指令、過濾器和組件,Vue.js還提供了靈活的mixin機制,讓用戶可以在多個組件中復(fù)用共同的特性。

以上是“vue.js核心的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI