Vue.mixin 的使用场景和原理
在日常开发中会经常遇到在不同的组件中有相同的代码和逻辑,这些代码的功能相对独立,可以通过Vue的Mixin抽离公共的业务逻辑,原理类似于“对象的继承”,当组件初始化时会调用mergeOptions方法进行合并,采用策略模式针对不同的属性进行合并,当组件和混入对象有同名选项时,这些选项将以恰当的方式进行合并。
相关实现代码:
scss
复制代码
/*
* @Author: cq
* @Date: 2021-07-24 00:35:13
* @LastEditTime: 2021-07-24 00:53:45
*/
export default function initMixin(Vue) {
Vue.mixin = function (mixin) {
//合并对象
this.options = mergeOptions(this.options, mixin)
}
}
// src/util/index.js
// 定义生命周期
export const LIFECYCLE_HOOKS = [ "beforeCreate", "created", "beforeMount", "mounted", "beforeUpdate", "updated", "beforeDestroy", "destroyed",];
//合并策略
const starts = {};
//mixin核心方法
export function mergeOptions(parent, child) {
const options = {};
//遍历父组件
for (let k in parent) {
mergeFiled(k);
}
//父亲没有,儿子有
for (let k in child) {
if (parent.hasOwnProperty(k)) {
mergeFiled(k)
}
}
//核心:合并字段的方法
function mergeFiled(k) {
if (starts[k]) {
options[k] = starts[k](parent[k], child[k]);
} else {
//默认策略
options[k] = child[k] ? child[k] : parent[k];
}
}
return options;
}
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!