初六复工,难以接受,我甚至能接受今天是我六十大寿但是我难以接受今儿是正月初六。
言归正传
年前写了个分享,还要所有的页面都要有分享,那我岂不是每个页面都要写一个onShareAppMessage?nonono,这不能这么干,这违背了我们少写一行是一行的理念。
所以,我得写个全局的分享,但是这个onShareAppMessage的触发点只有button和胶囊的三个点点,所以并不是简单的写个公共方法就能解决的事儿。
经过不懈的研究,写了以下demo,供大家参考。
首先呢这个方法得写在app.js里面
app.js
//这个function是要写在APP()的外面
!function () {
var PageTmp = Page
Page = function (pageConfig) {
let routerUrl = ""
wx.onAppRoute(function (res) {
let pages = getCurrentPages(),
view = pages[pages.length - 1];
routerUrl = view.route
})
pageConfig = Object.assign({
onShareAppMessage: function () {
//需要单独写分享方法的页面
let noGlobalSharePages=["pages/a/a","pages/b/b"]
//分享的时候要携带的参数
let obj = {
userId: config.user_name
}
let value = encodeURIComponent(JSON.stringify(obj))
let shareObj={}
//判断当前页面是不是需要单独写分享方法的页面
if (!routerUrl.includes(noGlobalSharePages)){
shareObj={
title:config.text,
path: 'pages/home/home?obj=' +value,
imageUrl: config.ShareImg
}
}
return shareObj
}
}, pageConfig);
PageTmp(pageConfig);
}
}();
APP({
globalData:...,
onshow(){...}
})
这个方法就基本成型了
然后呢,我在写的时候遇到了个小问题,就是我在这个方法里面拿不到globalData的数据,所以我就定义了个全局变量,在小程序初始化的时候把我需要用到的this.globalData赋值到我定义的变量上面
let config;
APP({
onLunch(){
// 赋值
config=this.globalData;
},
globalData:{
user_name:'..',
text:'...',
ShareImg:'....'
}
})
用的时候就是 config.text 这样就行啦
这样的话,想用这个方法得页面就不能在页面的js里面写onShareAppMessage了,不然会把app.js里面的分享方法给覆盖掉
还有,如果想在某个页面里面写个单独的分享方法,就在js里面写个普通的onShareAppMessage就可以啦
mine.js
onShareAppMessage(){
return {
title:'我是一朵花',
path:'...',
imageUrl:'...'
}
}