前言
在使用vue2开发业务时,难免会遇到一些多组件公用的方法和基础的数值。
比如你的页面里面有很多相似的列表展示,分页器都是默认1页10行,都需要调用某个公共的接口,或者某一个操作函数很多页面都需要调用。
这个时候,就可以使用mixin和extend这两个api,将公共的数据和代码进行一个封装,在需要的组件中可以使用,这样就会大大减少冗余的代码。
其实mixin的使用十分简单
就是你创建一个js文件,暴露一个对象,你可以在这个对象里面定义和vue组件中options同名的一些属性,你要是听不明白我在说什么,我写一个实例你就很明白了。
demo
创建一个mixinTest.js文件
export const mixinTest = {
data(){
return{
mixinvalue:'混入的默认值',
numVal:666,
objVal:{
name:'王惊涛',
age:28
},
value:'mixin的值'
}
},
methods:{
changeValue(){
this.objVal.age ++
console.log(this.comVal,'组件本身的一个值')
}
}
}
在组建中使用
<template>
<div>
<p>组件本身的值:{{ comVal }}</p>
<p>mixin字符串:{{ mixinvalue }}</p>
<p>mixin数字:{{ numVal }}</p>
<p>mixin名字:{{ objVal.name }}</p>
<p>mixin年龄:{{ objVal.age }}</p>
<p>覆盖mixin的值:{{ value }}</p>
<el-button @click="changeValue">大一岁</el-button>
</div>
</template>
<script>
import {mixinTest} from '@/utils/mixinTest.js'
export default{
name:'MixCom',
mixins:[mixinTest],
data(){
return{
comVal:'mixinCom本身的值',
value:'组件内的值'
}
},
methods:{
}
}
</script>
<style scoped lang="less">
</style>
效果
结论
1.mixin中也是可以获取到组件中的数据
2.如果mixin和组件中的数据同名,组件中的优先级高,会覆盖掉mixin中的数据或者方法
mixin和组件之间数据的封闭性
一个mixin被多个组件应用,并不会引发值得混乱,每一个组件引入的mixin,都是独立存在的
<template>
<div>
<h4>mixin混入模块1</h4>
<MixCom></MixCom>
<hr>
<h4>mixin混入模块2</h4>
<MixCom></MixCom>
</div>
</template>
<script>
import MixCom from './MixCom.vue';
export default {
name: 'extendAndMixin',
components: {
MixCom
}
}
</script>
<style scoped lang="less"></style>
修改下面组件中的值并不会影响其他组件的数据