在Vue.js中使用Mixins的方法
一個(gè)很常見的場(chǎng)景: 有兩個(gè)非常相似的組件, 它們擁有非常相似的基本功能, 但是它們之間又有足夠的不同的地方, 該如何選擇呢? 我們是應(yīng)該將它們分成兩個(gè)完全不同的組件呢? 還是創(chuàng)建一個(gè)基礎(chǔ)組件, 然后定義足夠多的props以方便區(qū)分使用場(chǎng)景?
這兩種方式都不是完美的: 如果你將它們分成兩個(gè)完全不同的組件, 在需求變化(功能變化)時(shí), 可能會(huì)增加需要同時(shí)修改兩個(gè)組件的風(fēng)險(xiǎn), 這違反了”DRY”的前提. 另一方面, 太多的props很快會(huì)讓人變得凌亂, 并且, 迫使維護(hù)人員, 甚至是你自己, 要首先理解這些props的上下文才能使用它, 這會(huì)讓人非常失望.
Vue的Mixins是非常實(shí)用的編程方式, 因?yàn)樽罱K實(shí)用的編程是通過不斷減少運(yùn)動(dòng)部件(moving parts)使代碼變得容易理解. (關(guān)于這一點(diǎn), Michael Feathers有一個(gè)很好的引用). 一個(gè)mixin允許你封裝一個(gè)功能, 以便你能在整個(gè)應(yīng)用程序中的不同組件中使用它. 如果mixin被正確的創(chuàng)建, 它們是純粹的–它們不會(huì)修改或更改函數(shù)的作用范圍(scope)之外的內(nèi)容, 因此, 您可以在多個(gè)地方執(zhí)行它們, 并且只要輸入值相同, 總是能非常可靠得得到相同的結(jié)果. 這真的非常強(qiáng)大.
認(rèn)識(shí)Mixins
混合 (mixins) 是一種分發(fā) Vue 組件中可復(fù)用功能的非常靈活的方式?;旌蠈?duì)象可以包含任意組件選項(xiàng)。以組件使用混合對(duì)象時(shí),所有混合對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)。
栗子
假設(shè)我們有一些不同的組件, 它們的工作是切換狀態(tài)boolean, 一個(gè)模態(tài)(modal)和一個(gè)提示(tooltip). 這些tooltips和modals沒有很多共同之處, 除了這個(gè)功能: 它們看起來不一樣, 它們使用起來也不盡相同, 但是它們的邏輯是相似的 .
//modal const Modal = { template: '#modal', data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } } } //tooltip const Tooltip = { template: '#tooltip', data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } } }
我們可以從中提取邏輯, 并創(chuàng)建可以復(fù)用的部分:
const toggle = { data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } } } const Modal = { template: '#modal', mixins: [toggle] }; const Tooltip = { template: '#tooltip', mixins: [toggle] };
duang — 一個(gè)小而簡(jiǎn)單的:chestnut:讓我們知道了Mixins對(duì)于封裝一些可復(fù)用的功能如此有趣、方便、實(shí)用。
demo地址:https://github.com/hzzly/xyy-vue
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)vue事件的延遲執(zhí)行實(shí)例講解
今天小編就為大家分享一篇對(duì)vue事件的延遲執(zhí)行實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Vue項(xiàng)目中使用jquery的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中使用jquery的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05使用vue-cli搭建SPA項(xiàng)目的詳細(xì)過程
vue-cli是vue.js的腳手架,用于自動(dòng)生成vue.js+webpack的項(xiàng)目模板,本文通過實(shí)例代碼給大家介紹vue-cli搭建SPA項(xiàng)目的詳細(xì)過程,感興趣的朋友跟隨小編一起看看吧2022-09-09webpack+vue-cli項(xiàng)目中引入外部非模塊格式j(luò)s的方法
今天小編就為大家分享一篇webpack+vue-cli項(xiàng)目中引入外部非模塊格式j(luò)s的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09詳解Vue 普通對(duì)象數(shù)據(jù)更新與 file 對(duì)象數(shù)據(jù)更新
本篇文章主要介紹了詳解Vue 普通對(duì)象數(shù)據(jù)更新與 file 對(duì)象數(shù)據(jù)更新 ,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04詳解vue-cli項(xiàng)目開發(fā)/生產(chǎn)環(huán)境代理實(shí)現(xiàn)跨域請(qǐng)求
這篇文章主要介紹了詳解vue-cli項(xiàng)目開發(fā)/生產(chǎn)環(huán)境代理實(shí)現(xiàn)跨域請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07