vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用。最开始我一度认为这个和组件好像没啥区别。。后来发现错了。下面咱们来看看mixins和普通状况下引入组件有什么区别?vue
组件在引用以后至关于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操做,单本质上二者仍是泾渭分明,相对独立。数组
而mixins则是在引入组件以后,则是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并。至关于在引入后,父组件的各类属性方法都被扩充了。函数
单纯组件引用:this
父组件 + 子组件 >>> 父组件 + 子组件spa
mixins:code
父组件 + 子组件 >>> new父组件blog
做用:多个组件能够共享数据和方法,在使用mixin的组件中引入后,mixin中的方法和属性也就并入到该组件中,能够直接使用。钩子函数会两个都被调用,mixin中的钩子首先执行。console
先看一下简单的使用方法:钩子
创建一个mixin.jsclass
export default { data() { return { mixinName: 'mixin' } }, created() { console.log('mixin...', this.mixinName); }, mounted() {}, methods: {} }
在vue文件中使用mixin
import mixin from '@/mixin'; // 引入mixin文件
export default { mixins: [mixin] }
发现,mixin.js里的代码执行了,并且先于父组件同钩子函数内的方法先执行!!!
注意,mixin中的方法名重复的话,会以父组件的方法为主,这个重复能够本身来避免。
上诉是简单的mixin的使用,稍微复杂点的能够,将mixin分块
例如,咱们能够创建一个文件夹,名叫mixins
里边的没一个js文件就是一个mixin块儿,这样能够让模块更清晰
在父组件内引入:
import resize from '@/mixins/resize' export default { mixins: [resize], }
固然,上诉只有一个resize模块,若是有多个的话在数组内写上就能够了
感受mixin有很大的好处,咱们能够将代码分隔的更加清晰,复用性将更加好!!