参考链接
# VUE-Mixin
# 一篇文章搞定Vue中的混入mixin!
# vue mixins 让组件显得不再臃肿
# 前端手写方法系列之Mixin混入
什么是Minxin
先看定义
Mixin 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。
一个 mixin 对象可以包含任意组件选项。
当组件使用 mixin 对象时,所有 mixin 对象的选项将被“混合”进入该组件本身的选项。
从上面可以提取以下几点:
【目的】:分发 Vue 组件中的可复用功能
【mixin】是一个对象,对象中包含组件中可能会出现的选项
【使用对象】: Mixin被组件所使用
Mixin中可能出现的选项:VUE-组件选项
- 换成我自己的话就是:
- Mixin将各个组件中重复出现的部分提取出来,以对象的形式封装、展现,然后就不用在每个组件中反复重写,只需要调用就OK
怎么用
再次献上参考链接:# vue mixins 让组件显得不再臃肿
全局引入
Vue.mixin({
beforeCreate() {
// ...逻辑
// 这种方式会影响到每个组件的 beforeCreate 钩子函数
},
data(){
return{
// ……内容 数据
}
}
})
局部引入
mixin.js
// 定义一个mixin对象
export const myMixin={
data(){
return {
// ……内容 数据
}
},
methods:{
// ……方法
},
}
page.vue
// 引入mixin
import { myMixin } from '@/mixins/mixin.js'
export default {
name:"Page",
mixins:[myMixin], // 使用
}
mixin和组件内选项的优先级
一个 mixin 对象可以包含任意组件选项。 mixin被组件使用
这两句话注定mixin和组件内选项会产生冲突,
那产生冲突的时候,使用mixin中内容还是组件内选项的内容呢?
即使不产生冲突,二者谁先加载呢?
对data、methods等,冲突时优先加载组件选项的内容。
对钩子来讲,优先加载mixin中的钩子
关于mixin和mixins
在上面标题:怎么用中呈现的代码里可以看到,
全局:Vue.mixin({})
局部组件页面:mixins:[myMixin]
mixins可以引入多个mixin对象,这个mixin对象可以是myMixin,也可以是myMixin2、myMixin3……
mixin不仅指全局方法Vue.mixin({}),宏观意义来讲,也指Vue的一项内容、一项用法(才疏学浅,想不出具体词表达,意会一下吧)
扩展
再次献上参考链接:# 一篇文章搞定Vue中的混入mixin!
与vuex的区别
vuex:状态管理,全局性的,值被改变之后,在其他组件也会被改变
Mixins:变量定义在mixin对象中,组件每一次引入都会引入mixin中的状态,组件内改变变量,对其他组件不产生影响
与公共组件的区别
组件:在父组件中引入组件,类似院子(父组件)里盖个房子(子组件)
Mixins:组件引入mixin对象,相当于两个相邻的屋子把中间的墙砸了,扩展成新屋子