Vue混入與插件的使用介紹
1. 混入
概述:
混入(mixins)是一種分發(fā)Vue組件中可復(fù)用功能的非常靈活的方式?;烊雽?duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)。
簡(jiǎn)單來(lái)說(shuō),混入用于公共代碼復(fù)用。
混入分為:全局和局部。
混入的執(zhí)行順序:
<div id="app">
<h3>{{name}}</h3>
<hr>
<h3>{{showName}}</h3>
<hr>
<div>{{run()}}</div>
</div>
<script>
// 混入:用于公共代碼復(fù)用
// 方式 全局 局部
Vue.mixin({
// data混入
data() {
return {
name: '張三 -- 全局'
}
},
// 計(jì)算屬性混入
computed: {
showName() {
return 'abc -- 全局'
}
},
methods: {
run() {
return 'run -- 全局'
}
},
// 生命周期方法混入
created() {
console.log('created -- 全局');
}
})
// 局部混入
const mix = {
data() {
return {
name: '張三 -- 局部'
}
},
computed: {
showName() {
return 'abc -- 局部'
}
},
methods: {
run() {
return 'run -- 局部'
}
},
created() {
console.log('created -- 局部');
}
}
const vm = new Vue({
el: '#app',
data: {
// name: '張三 -- 實(shí)例'
},
// 局部混入調(diào)用,可以調(diào)用 n 個(gè)
mixins: [mix],
methods: {
run() {
return 'run -- 實(shí)例'
}
},
created() {
console.log('created -- 實(shí)例');
}
})
</script>
注意:
- 混入的配置,可以把幾乎所有new Vue配置中的所有配置都能混入,但是el配置它不可以混入
- data配置,在混入方式中,只能寫函數(shù)的方式,且函數(shù)一定要返回一個(gè)對(duì)象,混入可能被調(diào)用多次,如果直接是對(duì)象的話,就會(huì)有污染(調(diào)用多次,引用地址卻不變,實(shí)例之間調(diào)用時(shí)不會(huì)互相影響)
- data混入的優(yōu)先級(jí)(對(duì)象屬性) 組件(實(shí)例) > 局部 > 全局 => 只會(huì)調(diào)用一個(gè)
- 生命周期方法,執(zhí)行順序 全局 -> 局部 --> 組件(實(shí)例) 依次執(zhí)行
- 方法依次執(zhí)行,屬性對(duì)應(yīng)的配置只執(zhí)行一次,data是例外
2. 插件
概述:
在vue中提供插件機(jī)制,可以通過(guò)它的要求來(lái)完成插件的封裝,運(yùn)用到項(xiàng)目中
語(yǔ)法:
Vue.use(函數(shù)|類|對(duì)象,[可選參數(shù)])
// 函數(shù)
// 函數(shù)名稱 plugin 可以更換
function plugin(Vue類,options可選參數(shù)){}
// 類
class Plugin {
// 必須是靜態(tài)方法,且名稱必須為install
static install(Vue類,options可選參數(shù)){}
}
// 調(diào)用靜態(tài)屬性:Plugin.install(Vue類,options可選參數(shù))
// 對(duì)象
const obj = {
// 屬性名稱必須為 install
install(Vue類,options可選參數(shù)){}
}案例:
<div id="app">
<h3 v-red>{{title}}</h3>
</div>
<script>
// 它是就一個(gè)模塊
function plugin(Vue, options) {
console.log(options);
// 這是一個(gè)指令
Vue.directive('red', el => {
el.style.cssText = 'color:red'
})
// 這是混入
Vue.mixin({
data() {
return {
title: `() => console.log('run');`
}
},
// 這是生命周期方法
created() {
this.title = options.title
console.log('混入了');
}
})
// 靜態(tài)屬性
Vue.run = () => console.log('run');
// 添加成員屬性
Vue.prototype.play = () => console.log('play');
}
// 插入插件,可以插入?yún)?shù)
Vue.use(plugin, { title: 'abc' })
const vm = new Vue({
el: '#app',
data: {
},
created() {
Vue.run()
this.play()
}
})
</script>
插件封裝成類:
<div id="app">
<h3 v-red>{{title}}</h3>
</div>
<script>
class Plugin {
// 它是就一個(gè)模塊
static install(Vue, options) {
console.log(options);
Vue.directive('red', el => {
el.style.cssText = 'color:red'
})
Vue.mixin({
data() {
return {
title: `() => console.log('run');`
}
},
created() {
this.title = options.title
console.log('混入了');
}
})
// 添加成員屬性
Vue.prototype.run = () => console.log('run');
}
}
// 插入插件
Vue.use(Plugin, { title: 'abc' })
const vm = new Vue({
el: '#app',
data: {
},
created() {
this.run()
}
})
</script>插件封裝成對(duì)象:
<div id="app">
<h3 v-red>{{title}}</h3>
</div>
<script>
const Plugin = {
install(Vue, options) {
console.log(options);
Vue.directive('red', el => {
el.style.cssText = 'color:red'
})
Vue.mixin({
data() {
return {
title: `() => console.log('run');`
}
},
created() {
this.title = options.title
console.log('混入了');
}
})
// 添加成員屬性
Vue.prototype.run = () => console.log('run');
}
}
// 插入插件
Vue.use(Plugin, { title: 'abc' })
const vm = new Vue({
el: '#app',
data: {
},
created() {
this.run()
}
})
</script>到此這篇關(guān)于Vue混入與插件的使用介紹的文章就介紹到這了,更多相關(guān)Vue混入與插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
crypto-js對(duì)稱加密解密的使用方式詳解(vue與java端)
這篇文章主要介紹了如何在Vue前端和Java后端使用crypto-js庫(kù)進(jìn)行AES加密和解密,前端通過(guò)創(chuàng)建AES.js文件來(lái)實(shí)現(xiàn)加密解密功能,并在Vue文件或JavaScript中使用,后端則可以直接使用Java代碼進(jìn)行AES加密和解密操作,需要的朋友可以參考下2025-01-01
vue 使用鼠標(biāo)滾動(dòng)加載數(shù)據(jù)的例子
今天小編就為大家分享一篇vue 使用鼠標(biāo)滾動(dòng)加載數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
vue 運(yùn)用mock數(shù)據(jù)的示例代碼
本篇文章主要介紹了vue 運(yùn)用mock數(shù)據(jù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
淺析vue-router實(shí)現(xiàn)原理及兩種模式
這篇文章主要介紹了vue-router實(shí)現(xiàn)原理及兩種模式分析,給大家介紹了vue-router hash模式與history模式不同模式下處理邏輯,需要的朋友可以參考下2020-02-02
vue實(shí)現(xiàn)移動(dòng)端原生小球滑塊
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端原生小球滑塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
el-table?fixed固定列導(dǎo)致錯(cuò)位的解決方法介紹
ElementUI中el-table設(shè)置指定列固定不動(dòng),不受滾動(dòng)條影響,下面這篇文章主要給大家介紹了關(guān)于el-table?fixed固定列導(dǎo)致錯(cuò)位的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11

