util文件为小程序公用的一个方法文件,我们可以将程序内经常用的方法写在这个文件中,通过其他文件引用,可以达到一个方法全局使用的方法,减少代码量,一定程度上减少维护时间.这是util中是没有办法用this.setData()方法去设置变量值的.因为他不属于任何一个页面.那我们如果想要在util文件的方法中给页面赋值怎么实现呢?
这里用到了微信公用方法:getCurrentPages() 之前做过一个案例希望可以加载页面的时候自动加载底部导航栏实现自定义热更新的小程序底部导航栏,如果分开写的话每个导航页面都需要写一个方法,就考虑想用Util写一个公共方法
代码如下:
//获取底部导航方法
function settabbar() {
wx.request({
url: getApp().globalData.url + ‘syssetting/gettabbar’,//获取底部导航图标,文字信息
method: ‘POST’,
header: {// 设置请求的 header
’content-type’: ‘application/x-www-form-urlencoded’
},
data: {
appid: getApp().globalData.appid
},
success: function (res) {
wx.hideLoading()
var pages = getCurrentPages(); //这里使用了getCurrentPages()方法,该方法是用来获取浏览记录的
console.log(pages) //打印结果如下图
var prevPage = pages[pages.length - 1]
prevPage.setData({
tabbar: res.data,
page:’/’+ prevPage.route
})
},
fail: function (res) {
wx.showToast({
title: ‘请求失败’,
})
},
})
}
我们可以看到结果中的route表示了当前打开的页面
如果我们再首页点进商品详情页再打印出路由记录时会显示如下结果:
我们会发现变量pages为2个元素的数组了,展开第二个元素可以看到现在打开的商品详情页,第一个元素的路径为首页路径
这样我们可以得到的在Util页面中标示当前页面为pages[pages.length - 1]
var prevPage = pages[pages.length - 1]
prevPage.setData({
tabbar: res.data,
page:’/’+ prevPage.route
})
我们用这个方法就可以在util页面中给引用的页面赋值了!!!
PS:util文件的编写方法 和暴露接口的方法请参照小程序文档
代码格式有点乱,用markdown的 ```语法包裹起来。
对于下面的评论过长 我建议微信官方限制一下
已经进行屏蔽,后续我们出一些规范,对此类行为进行处罚。
学习了,感谢分享