深入了解Vue.js 混入(mixins)
混入 (mixins)定義了一部分可復(fù)用的方法或者計(jì)算屬性?;烊雽ο罂梢园我饨M件選項(xiàng)。當(dāng)組件使用混入對象時(shí),所有混入對象的選項(xiàng)將被混入該組件本身的選項(xiàng)。
來看一個(gè)簡單的實(shí)例:
var vm = new Vue({ el: '#databinding', data: { }, methods : { }, }); // 定義一個(gè)混入對象 var myMixin = { created: function () { this.startmixin() }, methods: { startmixin: function () { document.write("歡迎來到混入實(shí)例"); } } }; var Component = Vue.extend({ mixins: [myMixin] }) var component = new Component();
選項(xiàng)合并
當(dāng)組件和混入對象含有同名選項(xiàng)時(shí),這些選項(xiàng)將以恰當(dāng)?shù)姆绞交旌稀?/p>
比如,數(shù)據(jù)對象在內(nèi)部會進(jìn)行淺合并 (一層屬性深度),在和組件的數(shù)據(jù)發(fā)生沖突時(shí)以組件數(shù)據(jù)優(yōu)先。
以下實(shí)例中,Vue 實(shí)例與混入對象包含了相同的方法。從輸出結(jié)果可以看出兩個(gè)選項(xiàng)合并了。
var mixin = { created: function () { document.write('混入調(diào)用' + '<br>') } } new Vue({ mixins: [mixin], created: function () { document.write('組件調(diào)用' + '<br>') } });
輸出結(jié)果為:
混入調(diào)用
組件調(diào)用
如果 methods 選項(xiàng)中有相同的函數(shù)名,則 Vue 實(shí)例優(yōu)先級會較高。如下實(shí)例,Vue 實(shí)例與混入對象的 methods 選項(xiàng)都包含了相同的函數(shù):
var mixin = { methods: { hellworld: function () { document.write('HelloWorld 方法' + '<br>'); }, samemethod: function () { document.write('Mixin:相同方法名' + '<br>'); } } }; var vm = new Vue({ mixins: [mixin], methods: { start: function () { document.write('start 方法' + '<br>'); }, samemethod: function () { document.write('Main:相同方法名' + '<br>'); } } }); vm.hellworld(); vm.start(); vm.samemethod();
輸出結(jié)果為:
HelloWorld 方法
start 方法
Main:相同方法名
以上實(shí)例,我們調(diào)用了以下三個(gè)方法:
vm.hellworld();
vm.start();
vm.samemethod();
從輸出結(jié)果 methods 選項(xiàng)中如果碰到相同的函數(shù)名則 Vue 實(shí)例有更高的優(yōu)先級會執(zhí)行輸出。
全局混入
也可以全局注冊混入對象。注意使用! 一旦使用全局混入對象,將會影響到 所有 之后創(chuàng)建的 Vue 實(shí)例。使用恰當(dāng)時(shí),可以為自定義對象注入處理邏輯。
// 為自定義的選項(xiàng) 'myOption' 注入一個(gè)處理器。 Vue.mixin({ created: function () { var myOption = this.$options.myOption if (myOption) { console.log(myOption) } } }) new Vue({ myOption: 'hello!' }) // => "hello!"
謹(jǐn)慎使用全局混入對象,因?yàn)闀绊懙矫總€(gè)單獨(dú)創(chuàng)建的 Vue 實(shí)例 (包括第三方模板)。
以上就是深入了解Vue.js 混入的詳細(xì)內(nèi)容,更多關(guān)于Vue.js 混入的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue完美實(shí)現(xiàn)el-table列寬自適應(yīng)
這篇文章主要介紹了vue完美實(shí)現(xiàn)el-table列寬自適應(yīng),對vue感興趣的同學(xué),可以參考下2021-05-05vue element-ui使用required進(jìn)行表單校驗(yàn)時(shí)自定義提示語問題
這篇文章主要介紹了vue element-ui使用required進(jìn)行表單校驗(yàn)時(shí)自定義提示語問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Vue.js實(shí)現(xiàn)開發(fā)購物車功能的方法詳解
這篇文章主要介紹了Vue.js實(shí)現(xiàn)開發(fā)購物車功能的方法,結(jié)合實(shí)例形式分析了基于vue.js開發(fā)的購物車功能相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-02-02Vue計(jì)算屬性中reduce方法實(shí)現(xiàn)遍歷方式
這篇文章主要介紹了Vue計(jì)算屬性中reduce方法實(shí)現(xiàn)遍歷方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03詳解本地Vue項(xiàng)目請求本地Node.js服務(wù)器的配置方法
本文只針對自己需要本地模擬接口于是搭建一個(gè)本地node服務(wù)器供自己測試使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題
這篇文章主要介紹了vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11