小程序 分享 登录

简介,如果有一个需求,就是,要求每一个分享的页面,用户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就好了,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值