VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动
荫云优惠活动

关于确保每个页面都被applet登录的方法(applet保持登录)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

微信小程序如何确保每个页面都已登录?本文介绍了如何保证每个页面都被小程序登录的方法,希望对大家有所帮助!

关于确保每个页面都被applet登录的方法(applet保持登录)

一个微信小程序有一个主页、一个个人页面、一些列表页面、详情页等。这些页面中的大多数都可以共享。当其他用户打开共享页面时,该页面如何确保该用户已经登录?

互联网上有许多向请求包添加拦截的方案。如果没有令牌,请在继续之前调用登录请求以获取令牌。这种方案没有任何问题,只要注意当一个页面同时有多个请求被触发时,当所有的请求都被拦截时,它们被放入一个数组中,并在成功获取令牌后,逐个遍历该数组就足够了。

然而,这个要求有点复杂。例如,大多数页面都需要有商店(因为需要根据商店获取当前商店中商品的库存和价格)。该商店是根据当前定位调用后台接口获得的。这时候如果封装在请求里就太麻烦了。

解决办法

首先,我们注意到登录和位置获取与我们的页面请求是异步的,我们需要确保页面请求在登录和位置获取之后,但如果我们每个页面都写一次,可维护性就会太差。所以我们可以想出一个办法来做这件事。所以代码看起来像这样:

const app = getapp()page({ data:{ logs:【】},onload(){ app。common log in(()=》{//页面请求处理})})似乎解决了我们这里的问题,但再想想,如果你想做更多的事情,例如,每个页面的onShareAppMessage以统一的方式处理,但我不想在每个页面上都写一遍。此外,我想自己实现对每个页面的监视。怎么做?

进一步解决方案

我们可以看到微信小程序,每个页面都是一个页面(),所以我们可以给这个页面添加一个外壳,我们可以有一个MyPage来替换这个页面。废话不多说,编写代码:

Tool.js相关代码

/* * *处理合并参数*/handlepageparamerge(arg){ let numargs = arg . length;//获取传递参数的值。let data = { } let page = { } for(let IX in arg){ let item = arg【IX】if(item . data & & type of(item . data)= = & # 39;对象& # 39;){ data = object . assign(data,item . data)} if(item . methods & & type of(item . methods)= = & # 39;对象& # 39;){ page = object . assign(page,Item . methods)} else { page = object . assign(page,Item)} } page。data = data return page}/* * *合并页面方法和数据,兼容{data: {},methods: {}或{data:{},a: {},B:{ } } */Merge page(){ Return this。handlepageparamerge(arguments)}/* * *处理组件参数合并*/handlecompparamerge(arg){ Letnumargs = arg . length;//获取传递参数的值。let data = { } let options = { } let properties = { } let methods = { } let comp = { } for(let IX in arg){ let item = arg【IX】//合并初始数据if(item。(项目的数据和类型。data)= & # 39;对象& # 39;){data = object。分配(数据,项目。data)}//合并组件的属性列表if(item。(项目的属性和类型。属性)= & # 39;对象& # 39;){properties = object。分配(属性,项目。properties)}/方法组件列表if(item。(项目的方法和类型。methods)= & # 39;对象& # 39;){ methods = object . assign(methods,item . methods)} if(item . options & & type of(item . options)= = & # 39;对象& # 39;){ options = object . assign(options,item . options)} comp = object . assign(comp,item)} comp . data = data comp . options = options comp . properties = properties comp . Methods = Methods Return comp }/* * *组件混合{properties: {},options: {},data: {},Methods:{ } } */merge Component(){ Return this。HandleCompparamerge(arguments)}/* * * *使用watch */ newPage()撰写页面。{let options = this。handlepageparammerge(arguments)let = this let app = getapp()//添加全局点击登录判断if(!options . public check log in){ options . public check log in = function(e){ let pages = getCurrentPages()let page = pages【pages . length -1】let dataset = e . current target . dataset let callback = null//获取回调方法if(dataset . callback &(page【dataset . callback】)= =“function“){ callback = page【dataset . callback】}//console . log 6528回调》》& # 39;,callback,app . is register())//判断是否登录if(callback & & app。is register()){ callback(e)} else { wx。导航到({ URL:& # 39;/pages/log in/log in & # 39;})} } } const { onLoad } = options options . onLoad = function(arg){ options . watch & & that . set watcher(this)onLoad & & onLoad . call(this,arg)} const { on show } = options . on show = function(arg){ if(options . data . no autolog in | | app . is register()){ on show &/pages/log in/log in & # 39;})} }返回页面(选项)}/* *用watch合成组件,etc */new component(){ let options = this。HandleCompparamerge(参数)。让that = this const { Ready } = options options . Ready = function(arg){ options . watch & & that . set watcher(this)Ready & & Ready。call(this,arg)} return component(options)}/* * Set listener */Set watcher(page){ let data = page . data;let watch = page.watchObject.keys(手表)。forEach(v =》{ let key = v . split(& # 39;。');//将watch中的属性更改为& # 39;。'切入数组let nowData = data//将数据分配给nowData for(让I = 0;I《key . length -1;i++){//遍历键数组中除最后一个以外的元素!now data = now data【key【I】】;//将nowData指向其key属性对象} let last key = key【key . length -1】;//假设key = = & # 39我的名字& # 39;,现在now data = = = data【& # 39;我的& # 39;】===data.my,lastKey = = = & # 39名称& # 39;让观看乐趣=观看。handler | | watch【v】;//兼容有无handler两种写入方式,let deep = watch【v】。深沉;//如果没有设置deep,则未定义this。observe(now data,lastkey,watchfun,deep,page);//监控nowData对象的最后一个键})} * * *监控属性并执行监控函数*/obj(key,watchfun,deep,page){ var val = obj【key】;//判断deep为真且val不能为空且val的类型= = & # 39;对象& # 39;(数组中的数值变化也需要深度监控)if(deep & & val!= null & & typeof val = = = & # 39对象& # 39;){object。键(val)。foreach(child key =》{//遍历每个keythis。在val对象下观察(val,childkey,watchfun,deep,page);//递归调用监听器函数})} var that = this;object . define property(obj,key,{ configurable: true,enumerable: true,Set:function(value){ if(val = = value){ return }//用page对象调用以更改函数中的此点,以便this.data可以访问data中的属性值watch fun . Call(page,value,val);// value是新值,val是旧值val = valueIf(deep){//如果深度监听,请再次监听对象以监听其属性。that . obj(obj,key,watchFun,deep,page);} },get:function(){ return val;} })}页面代码:

app . tool . new page({ data:{/noautologin:false },on show:function(){//在此处写入页面请求逻辑}}最后。

代码已经在线运行了很长时间,可以根据自己的需要添加工具中的newPage包。总之,我在这里提供一个思路。如果有更好的想法,请分享出来。

【相关学习推荐:小程序开发教程】

以上就是如何保证每个页面都被小程序登录过的细节。更多资讯请关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:关于确保每个页面都被applet登录的方法(applet保持登录) https://zhujicankao.com/105389.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 关于确保每个页面都被applet登录的方法(applet保持登录)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!