关于VUE-Mixin

209 阅读2分钟

参考链接
# 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中的钩子

关于mixinmixins

在上面标题:怎么用中呈现的代码里可以看到,
全局:Vue.mixin({})
局部组件页面:mixins:[myMixin]

mixins可以引入多个mixin对象,这个mixin对象可以是myMixin,也可以是myMixin2myMixin3……
mixin不仅指全局方法Vue.mixin({}),宏观意义来讲,也指Vue的一项内容一项用法(才疏学浅,想不出具体词表达,意会一下吧)

扩展

再次献上参考链接:# 一篇文章搞定Vue中的混入mixin!

与vuex的区别

vuex:状态管理,全局性的,值被改变之后,在其他组件也会被改变

Mixins:变量定义在mixin对象中,组件每一次引入都会引入mixin中的状态,组件内改变变量,对其他组件不产生影响

与公共组件的区别

组件:在父组件中引入组件,类似院子(父组件)里盖个房子(子组件)

Mixins:组件引入mixin对象,相当于两个相邻的屋子把中间的墙砸了,扩展成新屋子