关于混入(mixin),vue官方是这么解释的:
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。
刚开始理解可能不太好理解,也就是这么个意思,你可以在混入中定义任何的生命周期,方法,data值,然后把混入引入你想要引入的页面或者组件中,亦或者全局引入,混入中定义的方法、值就是该组件本身的方法,值,所以全局引入的话要慎用。
export const mixin={ data(){ return { number:1 } } created: function () { this.hello() }, methods: { hello: function () { console.log('hello from mixin!') } } }
局部引入:首先我们在src目录下新建一个名为mixin的文件夹并在mixin文件中创建一个mixin.js文件。
引入:
<template> //这里读的值其实是mixin的值,因为这个时候mixin已经混入到vue实例中了 <div>page1的值是:{{number}}</div> </template> <script> //引入mixin.js import {mixin} from "./mixin/mixin" export default { //这里注意:属性名为mixins,值为数组类型 mixins:[mixin], data () { return { } }, } </script> <style scoped> </style>
全局引用:全局混入我们只需要把mixin.js引入到main.js中,然后将mixin放入到Vue.mixin()方法中即可;
import Vue from 'vue' import mixin from "./mixin/mixin.js" Vue.mixin(mixin)
混入特性:
1、当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
2、值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。
vuex状态管理相信大家都已经比较熟了,就不多说了。
mixin混入对象和Vuex的区别:
1、vuex中的方法和变量是可以相互读取并相互更改的,mixin不会。mixin可以定义公用的变量或方法,但是mixin中的数据是不共享的,也就是每个组件中的mixin实例都是不一样的,都是单独存在的个体,不存在相互影响的;
2、mixin可以定义公用的变量或方法,但是mixin中的数据是不共享的,也就是每个组件中的mixin实例都是不一样的,都是单独存在的个体,不存在相互影响的;