深入了解Vue.js 混入(mixins)
混入 (mixins)定義了一部分可復(fù)用的方法或者計(jì)算屬性。混入對(duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)。
來看一個(gè)簡(jiǎn)單的實(shí)例:
var vm = new Vue({
el: '#databinding',
data: {
},
methods : {
},
});
// 定義一個(gè)混入對(duì)象
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)組件和混入對(duì)象含有同名選項(xiàng)時(shí),這些選項(xiàng)將以恰當(dāng)?shù)姆绞交旌稀?/p>
比如,數(shù)據(jù)對(duì)象在內(nèi)部會(huì)進(jìn)行淺合并 (一層屬性深度),在和組件的數(shù)據(jù)發(fā)生沖突時(shí)以組件數(shù)據(jù)優(yōu)先。
以下實(shí)例中,Vue 實(shí)例與混入對(duì)象包含了相同的方法。從輸出結(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)先級(jí)會(huì)較高。如下實(shí)例,Vue 實(shí)例與混入對(duì)象的 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)先級(jí)會(huì)執(zhí)行輸出。
全局混入
也可以全局注冊(cè)混入對(duì)象。注意使用! 一旦使用全局混入對(duì)象,將會(huì)影響到 所有 之后創(chuàng)建的 Vue 實(shí)例。使用恰當(dāng)時(shí),可以為自定義對(duì)象注入處理邏輯。
// 為自定義的選項(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)慎使用全局混入對(duì)象,因?yàn)闀?huì)影響到每個(gè)單獨(dú)創(chuàng)建的 Vue 實(shí)例 (包括第三方模板)。
以上就是深入了解Vue.js 混入的詳細(xì)內(nèi)容,更多關(guān)于Vue.js 混入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue ElementUI的from表單實(shí)現(xiàn)登錄效果的示例
本文主要介紹了vue ElementUI的from表單實(shí)現(xiàn)登錄效果的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
vue2項(xiàng)目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題
這篇文章主要介紹了vue2項(xiàng)目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
vue3(vite)設(shè)置代理封裝axios api解耦功能
這篇文章主要介紹了vue3(vite)設(shè)置代理封裝axios api解耦,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
vue 組件開發(fā)原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了vue 組件開發(fā)原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了vue.js組件開發(fā)的原理與實(shí)現(xiàn)方法,需要的朋友可以參考下2019-11-11
解決iview打包時(shí)UglifyJs報(bào)錯(cuò)的問題
下面小編就為大家分享一篇解決iview打包時(shí)UglifyJs報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
vue實(shí)現(xiàn)鼠標(biāo)滑動(dòng)展示tab欄切換
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)鼠標(biāo)滑動(dòng)展示tab欄切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

