詳解vue mixins和extends的巧妙用法
vue提供了mixins、extends配置項,最近使用中發(fā)現(xiàn)很好用。
混合mixins和繼承extends
看看官方文檔怎么寫的,其實兩個都可以理解為繼承,mixins接收對象數(shù)組(可理解為多繼承),extends接收的是對象或函數(shù)(可理解為單繼承)。
繼承鉤子函數(shù)
const extend = { created () { console.log('extends created') } } const mixin1 = { created () { console.log('mixin1 created') } } const mixin2 = { created () { console.log('mixin2 created') } } export default { extends: extend, mixins: [mixin1, mixin2], name: 'app', created () { console.log('created') } }
控制臺輸出
extends created mixin1 created mixin2 created created
- 結(jié)論: 優(yōu)先調(diào)用mixins和extends繼承的父類,extends觸發(fā)的優(yōu)先級更高,相對于是隊列
- push(extend, mixin1, minxin2, 本身的鉤子函數(shù))
- 經(jīng)過測試, watch的值 繼承規(guī)則一樣。
繼承methods
const extend = { data () { return { name: 'extend name' } } } const mixin1 = { data () { return { name: 'mixin1 name' } } } const mixin2 = { data () { return { name: 'mixin2 name' } } } // name = 'name' export default { mixins: [mixin1, mixin2], extends: extend, name: 'app', data () { return { name: 'name' } } } // 只寫出子類,name = 'mixin2 name',extends優(yōu)先級高會被mixins覆蓋 export default { mixins: [mixin1, mixin2], extends: extend, name: 'app' } // 只寫出子類,name = 'mixin1 name',mixins后面繼承會覆蓋前面的 export default { mixins: [mixin2, mixin1], extends: extend, name: 'app' }
- 結(jié)論:子類再次聲明,data中的變量都會被重寫,以子類的為準。
- 如果子類不聲明,data中的變量將會最后繼承的父類為準。
- 經(jīng)過測試, props中屬性 、 methods中的方法 和 computed的值 繼承規(guī)則一樣。
下面單獨介紹下mixins、extends、extend
mixins
調(diào)用方式: mixins: [mixin1, mixin2]
是對父組件的擴充,包括methods、components、directive等。。。
觸發(fā)鉤子函數(shù)時,先調(diào)用mixins的函數(shù),再調(diào)用父組件的函數(shù)。
雖然也能在創(chuàng)建mixin時添加data、template屬性,但當父組件也擁有此屬性時以父為準,從這一點也能看出制作者的用心(擴充)。
data、methods內(nèi)函數(shù)、components和directives等鍵值對格式的對象均以父組件/實例為準
extends
調(diào)用方式: extends: CompA
同樣是對父組件的擴充,與mixins類似,但優(yōu)先級均次于父組件
extend
擴展組件的構(gòu)造器
當我們調(diào)用vue.component('a', {...})時自動調(diào)用
值得注意的是extend內(nèi)的data為一個函數(shù)
總結(jié)
以上所述是小編給大家介紹的vue mixins和extends的巧妙用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vue+element+electron仿微信實現(xiàn)代碼
這篇文章主要介紹了vue+element+electron仿微信實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12vue3項目導(dǎo)入異常Error:@vitejs/PLUGIN-vue?requires?vue?(>=3.2.13
這篇文章主要給大家介紹了關(guān)于vue3項目導(dǎo)入異常Error:@vitejs/PLUGIN-vue?requires?vue?(>=3.2.13)的解決辦法,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下2024-01-01ElementUI嵌套頁面及關(guān)聯(lián)增刪查改實現(xiàn)示例
本文主要介紹了ElementUI嵌套頁面及關(guān)聯(lián)增刪查改實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2022-07-07在vue項目中promise解決回調(diào)地獄和并發(fā)請求的問題
這篇文章主要介紹了在vue項目中promise解決回調(diào)地獄和并發(fā)請求的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue實現(xiàn)網(wǎng)頁首屏加載動畫及頁面內(nèi)請求數(shù)據(jù)加載loading效果
Loading加載動畫組件看起來很簡單不重要,實際上它是保證用戶留存的關(guān)鍵一環(huán),下面這篇文章主要給大家介紹了關(guān)于Vue實現(xiàn)網(wǎng)頁首屏加載動畫及頁面內(nèi)請求數(shù)據(jù)加載loading效果的相關(guān)資料,需要的朋友可以參考下2023-02-02關(guān)于引入vue.js 文件的知識點總結(jié)
在本篇文章里小編給大家分享的是關(guān)于引入vue.js 文件的知識點總結(jié),有需要的朋友們可以參考學(xué)習下。2020-01-01