mixin混入
所谓混入,就是几个组件共享一个配置,可局部混入,也可全局混入;
第一步:先建个混入文件,配置写进去,再 export 出来;
新建 mixin.js 文件:
提示1:取个共用的配置名 commonConfig 和 commonMount;
提示2:写个共用的方法, showName();
提示3:写个共用的属性,year;
提示4:共用的配置,还可以是钩子函数等其他配置都行;
可以申明多个配置项,但引入的时候可以全部选择,也可以只选一个;
第二步:再组件中引入文件,通过配置项 mixins:[xxx] 应用;
要在 school.vue 和 student.vue 中应用,就分别修改这两个组件:
修改 school.vue 组件:
提示1:school.vue 使用的是引入来的共用属性 year;
提示2:引入混入文件中的共用配置,commonConfig 项;
提示3:再应用混入的配置项;
提示4:混入配置项跟 props 配置项一样,都要放在数组里面;
提示5:还有一个混入配置名 commonMount,在这个组件中没有用;
要在 student.vue 文件中应用混入,也要相应修改一下:
提示1:引入了两个混入配置声明;
看下效果:
提示1:引入了共用的属性 year ,都显示了,DevTools 中也能查看;
提示2:引入了共用的方法 showName(),点击名字后也都能显示;
提示3:student.vue 组件中,还引入了 mounted() 钩子函数,也执行了;
全局混入
在每个组件中都引入混入的写法是局部混入;
写在 main.js 文件中的写法是全局混入,就不需要在每个组件中分别混入了;
修改 main.js
提示1:import 两个混入配置声明;
提示2:分别应用 Vue.mixin()
两个混入,使用几个就引入几次;
提示1:分别点击学校名和学员名时,都能正常输出;
提示2:显示了4次“加载完成”,意思是说在每个组件都执行了一次;
在 Vue DevTools 中看到,共有4个组件,全部应用了 year 属性和 mounted() 钩子函数;
优点:只写一次都能用了;
不足:全局混入了,哪哪都有了;
共享配置的优先级
1)组件里的配置优先,其次是混入里的配置,例如:数据属性和方法等;
如果 school.vue 组件中,也使用了 year 属性,并有值,以当前组件为优先;
2)针对钩子函数,不论优先级,都会执行,而且混入里的钩子函数先执行;
给 school.vue 和 student.vue 组件也分别加上 mounted() 钩子函数;
school.vue 中添加 mounted()
student.vue 中也添加 mounted()
看下效果:
除了全局的 mounted() 4次钩子函数都执行了外,两个组件的也分别执行了;
注意:全局的钩子函数先执行,本组件中的钩子后执行;
加载顺序:
子组件先执行(黄框),app 组件其次(蓝框),root 最后(绿框)
【mixin(混入)】总结
功能:可能把多个组件共用的配置提取成一个混入对象;
使用方式:
第一步定义混入,例如:
第二步:引入混入配置项,例如:
第三步:应用混入,例如:
1、全局混入: Vue.mixin(xxx)
2、局部混入:mixins:['xxx','xxx','xxx']