目录
- 官网
- 基本概念
- 什么是Mixin
- 混入和组件的区别
- 混入和vuex的区别
- mixin的优点
- mixin的缺点
- 使用mixin
- 语法
- mixin
- 局部混入-mixins
- 全局混入-Vue.mixin方法(不推荐)
- mixin与组件合并逻辑
- [1]data数据
- [2]methods方法
- [3]生命周期函数
- 问题:一个组件中修改了mixin中的数据,会对其他引用了mixin的组件造成影响吗?
官网
vue_混入
基本概念
什么是Mixin
Mixin称为混入。其实Mixin不是Vue专属的,可以说它是一种思想,在很多开发框架中都实现了Mixin(混入),我们这里主要讲解的是Vue中的Mixin.
官网解释:混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项.
个人理解:混入就是将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可
混入和组件的区别
- 组件是将页面进行模块化,将某个经常使用的盒子的 html+css+js提取成公共组件,主要提取的是html+css;
- 混入提取的是公共
逻辑或配置
,主要提取的是js;
混入和vuex的区别
- Vuex公共状态管理,如果在一个组件中更改了Vuex中的某个数据,那么其它所有引用了Vuex中该数据的组件也会跟着变化;
- Mixin中的数据和方法都是
独立的
,组件之间使用后是互不影响
的;
mixin的优点
- 提高代码复用性
- 无需传递状态
- 维护方便,只需要修改一个地方即可
mixin的缺点
- 命名冲突
- 滥用的话后期很难维护
- 不好追溯源,排查问题稍显麻烦
- 不能轻易的重复代码
使用mixin
语法
mixin
mixin本质是一个对象,只不过这个对象里面可以包含Vue组件中的一些常见配置,如data、methods、生命周期、watch、computed、filter等等。
{
data(){
return{
}
},
methods:{
}
}
局部混入-mixins
mixins 选项接收一个混入对象的数组
。这些混入对象可以像正常的实例对象一样包含实例选项,这些选项将会被合并到最终的选项中,用于局部混入。
mixins:[mixin]
配置步骤
- (1)编写mixin
- (2)在使用的组件引入,使用mixins配置
全局混入-Vue.mixin方法(不推荐)
Vue.mixin方法接受的参数是一个混入对象,通过此方法将该混入进行全局注册,这样混入中的逻辑可以在任何组件中使用。
Vue.mixin(mixin)
配置步骤
- (1)编写mixin
- (2)在main.js引入,使用Vue.mixin配置
mixin与组件合并逻辑
[1]data数据
总结
- 在mixin中定义的变量可以直接在组件中使用,使用方式与直接在组件data中定义的变量使用方式相同;
- 若是变量名冲突
举例说明
(1)定义一个混入(位置不固定)
export default{
data () {
return{
msg:'hello word',
}
}
}
(2)在组件中使用
<template>
<div id&#61;"app">
{{msg}}
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
}
}
</script>
(3)执行结果
在页面上显示hello word
[2]methods方法
总结
- 在mixin中定义的方法可以直接在组件中使用&#xff0c;使用方式与直接在组件methods中定义的方法使用方式相同&#xff1b;
- 若是方法名冲突
举例说明
(1)mixin
export default{
data () {
return{
msg:&#39;hello word&#39;,
}
},
methods:{
editMsg(value){
this.msg &#61; value
}
}
}
(2)组件中
<template>
<div id&#61;"app">
{{msg}}
<button &#64;click&#61;"editMsg(222)">去修改</button>
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
},
}
</script>
(3)执行结果
最初页面显示hello word ,当点击去修改按钮时页面内容变为222
[3]生命周期函数
总结
- mixin中的生命周期函数会和组件的生命周期函数一起合并执行
- 合并后的执行顺序&#xff1a;
举例说明
(1) mixin
export default{
data () {
return{
msg:&#39;hello word&#39;,
}
},
created () {
console.log(&#39;我是子组件的created事件&#39;)
},
mounted () {
console.log(&#39;我是子组件的mounted事件&#39;)
}
}
(2)组件中
<template>
<div id&#61;"app">
{{msg}}
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
},
created () {
console.log(&#39;我是父组件的created事件&#39;)
},
mounted () {
console.log(&#39;我是父组件的mounted事件&#39;)
}
}
</script>
(3)执行结果
问题&#xff1a;一个组件中修改了mixin中的数据&#xff0c;会对其他引用了mixin的组件造成影响吗&#xff1f;
不会&#xff01;
原因&#xff1a;不同组件中的mixin是相互独立的