小程序的每个Page,在分享的时候都会绑定参数到path,其他用户打开的时候,都需要获取path的参数,这样在每个页面都要重写onShareAppMessage和onLoad里获取options参数,现在要实现的是写一个BasePage基类,直接在BasePage里监听onLoad和onShareAppMessage,而不需要修改业务Page页。
// app.js
const originPage = Page;
App({
onLaunch() { },
//封装Page基类,在这里执行基础操作,执行完成后执行具体的Page页
BasePage: function(initObj){
if(initObj.onLoad){
//保存Page的onLoad事件,在自定义的代码片段后再调用
let originOnLoad = initObj.onLoad;
initObj.onLoad = function(options){
//先执行公共的onLoad
console.log("公共onLoad的option", options);
//唤起Page页自己的onLoad
originOnLoad.call(this,options);
}
//全局的分享方法
initObj.onShareAppMessage = function(){
return {
title: '分享标题',
path: '', //根据currentPage拼接分享要传递参数
imageUrl: '分享封面'
}
}
}
return originPage(initObj)
},
})
然后在Page页
const app = getApp();//初始化app.js
app.BasePage({
data:{
//todo
},
onLoad:function(options){
console.log("Page页自己的onLoad");
},
});
这样,所有的公共操作在BasePage里完成就行了,极大地节省了代码量。