Mixin称为混入。其实Mixin不是Vue专属的,可以说它是一种思想,在很多开发框架中都实现了Mixin(混入),我们这里主要讲解的是Vue中的Mixin.
官网解释:混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项.
个人理解:混入就是将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可
逻辑或配置
,主要提取的是js;独立的
,组件之间使用后是互不影响
的;mixin本质是一个对象,只不过这个对象里面可以包含Vue组件中的一些常见配置,如data、methods、生命周期、watch、computed、filter等等。
{
data(){
return{
// 数据
}
},
methods:{
// 方法
}
}
mixins 选项接收一个混入对象的数组
。这些混入对象可以像正常的实例对象一样包含实例选项,这些选项将会被合并到最终的选项中,用于局部混入。
mixins:[mixin]
配置步骤
Vue.mixin方法接受的参数是一个混入对象,通过此方法将该混入进行全局注册,这样混入中的逻辑可以在任何组件中使用。
Vue.mixin(mixin)
配置步骤
后来者居上
先引入的会被后引入的mixin覆盖// 若是mixData2与mixData存在同名变量,则mixData2中的变量会被覆盖
mixins:[ mixData2, mixData ],
(1)定义一个混入(位置不固定)
export default{
data () {
return{
msg:'hello word',
}
}
}
(2)在组件中使用
<template>
<div id="app">
{{msg}}
</div>
</template>
<script>
import mixData from '../src/mixins/mixinTest'
export default {
name: 'App',
mixins:[ mixData ],
methods:{
}
}
</script>
(3)执行结果
在页面上显示hello word
后来者居上
先引入的会被后引入的mixin覆盖// 若是mixData2与mixData存在同名方法,则mixData2中的方法会被覆盖
mixins:[ mixData2, mixData ],
(1)mixin
export default{
data () {
return{
msg:'hello word',
}
},
methods:{
editMsg(value){
this.msg = value
}
}
}
(2)组件中
<template>
<div id="app">
{{msg}}
<button @click="editMsg(222)">去修改</button>
</div>
</template>
<script>
import mixData from '../src/mixins/mixinTest'
export default {
name: 'App',
mixins:[ mixData ],
methods:{
},
}
</script>
(3)执行结果
最初页面显示hello word ,当点击去修改按钮时页面内容变为222
// 先执行mixData2的生命周期函数再执行mixData的生命周期函数
mixins:[ mixData2, mixData ],
(1) mixin
export default{
data () {
return{
msg:'hello word',
}
},
created () {
console.log('我是子组件的created事件')
},
mounted () {
console.log('我是子组件的mounted事件')
}
}
(2)组件中
<template>
<div id="app">
{{msg}}
</div>
</template>
<script>
import mixData from '../src/mixins/mixinTest'
export default {
name: 'App',
mixins:[ mixData ],
methods:{
},
created () {
console.log('我是父组件的created事件')
},
mounted () {
console.log('我是父组件的mounted事件')
}
}
</script>
(3)执行结果
不会!
原因:不同组件中的mixin是相互独立的