vue混入mixin的介紹及理解
一、mixin是什么
mixin是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的類(lèi),提供了方法的實(shí)現(xiàn)。其他類(lèi)可以訪問(wèn)mixin類(lèi)的方法而不必成為其子類(lèi);
mixin類(lèi)通常作為功能模塊使用,在需要該功能時(shí)“混入”,有利于代碼復(fù)用又避免了多繼承的復(fù)雜。
本質(zhì)就是一個(gè)JS對(duì)象,可以包含組件中的任意功能選項(xiàng),如data、components、methods、creaded、computed以及生命周期函數(shù)等等。
只需要將共用的功能以對(duì)象的方式傳入mixins選項(xiàng)中,當(dāng)組件使用mixins對(duì)象時(shí)所有mixins對(duì)象的對(duì)象都將被混入該組件本身的選項(xiàng)中來(lái)。
局部混入
import mixin1 from './mixin1'
export default {
// mixins:[mixin1]
}
全局混入
Vue.mixin({
created: function () {
console.log("全局混入")
}
})
注意:當(dāng)組件存在與mixin對(duì)象相同的選項(xiàng)的時(shí)候,進(jìn)行遞歸合并的時(shí)候組件的選項(xiàng)會(huì)覆蓋mixin的選項(xiàng);但是如果相同的選項(xiàng)為生命周期鉤子的時(shí)候,會(huì)合并成一個(gè)數(shù)組,先執(zhí)行mixin的鉤子,再執(zhí)行組件的鉤子。
二、使用場(chǎng)景
在開(kāi)發(fā)中,經(jīng)常會(huì)遇到在不同的組件中用到相同或者相似的代碼,這些代碼的功能相對(duì)獨(dú)立;
例子
控制元素是否顯示,都會(huì)使用v-show,如果兩個(gè)組件中使用的變量和規(guī)則都相同,就可以把控制元素顯示單獨(dú)封裝成一個(gè)mixin.js文件。
modal.vue中
<template>
<div id="app">
<button @click="show()">modal顯示與隱藏</button>
<div v-show="isShowing">modal顯示</div>
</div>
</template>
<script>
import mixin1 from './mixin1'
export default {
mixins:[mixin1]
}
</script>tooltip中
<template>
<div id="app">
<button @click="show()">tooltip顯示與隱藏</button>
<div v-show="isShowing">tooltip顯示</div>
</div>
</template>
<script>
import mixin1 from './mixin1'
export default {
mixins:[mixin1],
}
</script>mixin1.js中
export default {
data() {
return {
isShowing:true
}
},
methods: {
show() {
this.isShowing = !this.isShowing
}
},
}三、原理分析
- 優(yōu)先遞歸處理mixins;
- 先遍歷合并parent中的key,調(diào)用mergeField方法進(jìn)行合并,然后保存在變量options;
- 再遍歷child,合并補(bǔ)上parent中沒(méi)有的key,調(diào)用mergeField方法進(jìn)行合并,保存在變量options;
- 通過(guò)mergeField函數(shù)進(jìn)行合并;
- 合并策略包括:替換型、合并型、隊(duì)列型、疊加型;
- 替換行策略有:props、methods、inject、computed;
- 合并型策略是data,通過(guò)set方法進(jìn)行合并和重新賦值,就是將新的同名參數(shù)替代舊的參數(shù);
- 隊(duì)列型策略有生命周期函數(shù)和watch,原理是將函數(shù)存入一個(gè)數(shù)據(jù),然后正序遍歷依次執(zhí)行。
- 疊加型有component、directives、filters,通過(guò)原型鏈進(jìn)行層層的疊加。
四、mixin的理解
回答:mixin是一種類(lèi),在vue中就是js文件,主要的作用是作為功能模塊引用。因?yàn)樵陧?xiàng)目中,可能不同組件會(huì)有相同的功能,比如控制元素的顯示和隱藏,如果他們的變量和規(guī)則也完全相同的話,就可以把這個(gè)功能單獨(dú)提取出來(lái),放在mixin.js中,再引入,就可以實(shí)現(xiàn)一樣的功能了。引入的方法也分為全局混入和局部混入,局部混入就是在每個(gè)組件中引入,全局混入就是在main.js中通過(guò)Vue.mixin()引入。
到此這篇關(guān)于vue混入mixin的介紹及理解的文章就介紹到這了,更多相關(guān)vue mixin內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法
本篇文章主要介紹了使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法,vue-cli 是一個(gè)官方發(fā)布 vue.js 項(xiàng)目腳手架,使用 vue-cli 可以快速創(chuàng)建 vue 項(xiàng)目,感興趣的小伙伴們可以參考一下2018-05-05
vue3 實(shí)現(xiàn)牙位圖選擇器的實(shí)例代碼
這篇文章主要介紹了vue3 實(shí)現(xiàn)牙位圖選擇器的實(shí)例代碼,代碼簡(jiǎn)單易懂,需要的朋友參考下吧2025-04-04
Vue綁定對(duì)象與數(shù)組變量更改后無(wú)法渲染問(wèn)題解決
這篇文章主要介紹了Vue綁定對(duì)象與數(shù)組變量更改后無(wú)法渲染問(wèn)題解決,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
vue省市區(qū)三聯(lián)動(dòng)下拉選擇組件的實(shí)現(xiàn)
本篇文章主要介紹了vue省市區(qū)三聯(lián)動(dòng)下拉選擇組件的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
watch(監(jiān)視屬性)和computed(計(jì)算屬性)的區(qū)別及實(shí)現(xiàn)案例
watch和computed是vue實(shí)例對(duì)象中的兩個(gè)重要屬性,watch是監(jiān)視屬性,用來(lái)監(jiān)視vue實(shí)例對(duì)象上屬性和方法的變化,computed被稱(chēng)為計(jì)算屬性,可以將data對(duì)象中的屬性進(jìn)行計(jì)算得到新的屬性,這篇文章主要介紹了watch(監(jiān)視屬性)和computed(計(jì)算屬性)的區(qū)別,需要的朋友可以參考下2023-05-05
vue forEach循環(huán)數(shù)組拿到自己想要的數(shù)據(jù)方法
今天小編就為大家分享一篇vue forEach循環(huán)數(shù)組拿到自己想要的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09

