需求:app页面第一次进入 加载一个函数,返回到此页面不执行此函数
解决方案:1.利用optionMergeStrategies 自定义一个合并策略.2.全局混入方法
说下这个optionMergeStrategies。
自定义合并策略,Vue.config.optionMergeStrategies 是配合mixin混入来使用得。vue有一套它自己得默认合并策略。比如方法合并成数组。如果需要修改可以重新定义它得methods ,Vue.config.optionMergeStrategies.methods = … 简单得理解就是可以更改或自定义它得一个合并规则。下面我们就使用它完成上面得需求。
在main。js中操作
1.自定义一个合并策略 esvReady
Vue.config.optionMergeStrategies.esvReady= (parentVal, childVal) => {
let result = childVal ?
parentVal // 如果 childVal存在
?
parentVal.concat(childVal) // 如果parentVal存在,直接合并
:
Array.isArray(childVal) // 如果parentVal不存在
?
childVal // 如果chilidVal是数组,直接返回
:
[childVal] // 包装成一个数组返回
:
parentVal;
return result;
};
2.全局混入esvReady(){}
Vue.mixin({
mounted() {
let isBack = this.$router && this.$router.isBack
// console.log(this.$options.esvShow);
if (isBack) {
} else {
if (Array.isArray(this.$options.esvReady)) {
this.$options.esvReady.forEach(each => {
each && each.call(this);
});
} else {
this.$options.esvReady.call(this);
}
}
if (Array.isArray(this.$options.esvShow)) {
this.$options.esvShow.forEach(each => {
each && each.call(this);
});
} else {
this.$options.esvShow.call(this);
}
},
/**
* 页面生命周期钩子,在页面初始化以后或者返回页面调用
*/
esvReady() { }
});
注意:esvReady() { } 一定要全局混入进去,不然 this.$options.esvShow.forEach 要报错。