简介,如果有一个需求,就是,要求每一个分享的页面,用户a分享给用户b,用户b点开的时候判断是否登录,没有登录就去登录页。登录之后再返回到分享的那个页面,这是一个个页面写是有些累的,于是琢磨出了一个全局的方法,
share: function() {
let that =this;
let bb='';
console.log('触发了分享方法')
//监听路由切换
//间接实现全局设置分享内容
wx.onAppRoute(function(res) {
//获取加载的页面
let pages = getCurrentPages();
console.log(view)
//获取当前页面的对象
let view = pages[pages.length - 1];
console.log('获取当前页面的对象',view)
console.log('获取当前页面的对象router', view.route)
console.log('获取当前页面的对象options', JSON.stringify(view.options))
let aa = JSON.stringify(view.options).replace(':', '=');
bb=that.objToStr(view.options);
console.log('bb',bb)
console.log('view.route+bb',view.route+bb)
//装载页面的数据对象
let data;
//如果存在历史记录的页面
if (view) {
//页面的data数据
data = view.data;
console.log("是否重写分享方法", data);
//如果页面不存在isOverShare这个变量的时候,重置默认的分享信息,如果页面的js里的data数据存在isOverShare,那么就不需要重置默认的分享信息,请在页面的onShareAppMessage里自定义分享信息
// if (!data.isOverShare) {
data.isOverShare = true;
view.onShareAppMessage = function() {
//分享配置
return {
title: "标题",
path: view.route + bb
};
};
// }
}
});
},
//把对象型参数改为字符串
objToStr: function(obj) {
console.log('obj', obj)
if (!obj) { return '' }
let params = []
for (let key in obj) {
params.push(`${key}=${obj[key]}`)
}
let paramsStr = params.length ? '?' + params.join('&') : '';
return paramsStr
},
然后在app.js的onlunch里面调用这个share方法,
onLaunch: function(launchRes) {
console.log("zcj-20190823", launchRes);
let url_zy='';
this.data.login_is_2 = launchRes.path;
let url_options = this.objToStr(launchRes);
url_zy = launchRes.path + url_options;
this.data.url_zy = url_zy;
this.share();
// wx.redirectTo({
// url: "/pages/seller/loginbyphone/loginbyphone"
// });
/**
ZCJ-TODO
--launchRes目前测试发现的值是
{
title:"", //这个好像是标题,比如在sellerpage里的onShareAppMessage里return的参数之一
desc:"", //这个好像是解释,onShareAppMessage里的return的参数之一
path: "", //这个好像是个路径,onShareAppMessage里的return的参数之一
prerender: false, //不知道
query: {}, //启动参数,应该是用户自定义的启动参数
referrerInfo: {}, //来源信息,也就是可能是其他小程序打开的话,这里就有其他小程序的信息
scene: 1007, //打开小程序的场景值
shareTicket: "<Undefined>" //分享信息规定的值之一
};
--这个值跟小程序的onAppShow 还是onShow 事件的参数一样的,也就是切换到前台时的参数
比如说,目前的需求来讲,就是a用户分享的信息,b用户拿不到的问题,能打得到的,就是这个参数
然后,把这个参数挂载到全局里,然后登录完成的时候,跳转到这个参数的path路径去
详细是
1 挂载全局变量
2 如果已登录,没啥事,如果没登录,自动跳转登录界面,这个都不用管
3 登录完成,判断是否存在全局变量,如果存在,跳转到全局变量的path路径上
4 如果不存在,返回大厅,或者返回上级路由地址
*/
这时候app.data.url_zy 就是用户a分享的页面的链接了,后面也带有参数,可以直接加在登录页的登陆成功的回调里的跳转页面的方法,url:app.data.url_zy就好了,