如何从tabbar页面传数据

无论是百度小程序还是微信小程序,app.json中规定的tabbar页面是不支持传参的,例如:

复制代码
<navigator url='../service/service?typeid=6' openType="switchTab"> 
服务项目 
</navigator> 

上面的navigater跳转有个属性:openType="switchTab"意思是打开tabbar页面service,虽然有个参数typeid=6,但是typeid=6并不能呗tabbar页面接收,造成打开tabbar页面的时候用于都是默认栏目。

(1)第一步:通过bindtap绑定方法触发缓存,把typeid存起来

虽然tabbar不支持传参,但是我们可以通过缓存的方式获取传递的参数,那么上面的navigator直接跳转的方式就不行了,需要封装一个方法:

复制代码
<view class='service_li' bindtap='show_service' data-typeid='11' data-listtype='3'> 
服务项目 
</view> 

index页面的"服务项目"通过bindtap绑定一个show_service方法,这个show_service会传递后边的data-*里边的所有参数。

在index.js中写上show_service方法:

复制代码
show_service: function (e) { 
    var data = e.currentTarget.dataset; 
    var title = data.title; //获取传递的title
    var typeid = data.typeid; //获取传递的typeid
    var listtype = data.listtype; //获取传递的listtype
    //通过setStorageSync方法将typed存入stypeid中,名字可以自己任意定
    wx.setStorageSync('stypeid', typeid) 
    wx.switchTab({ //通过switchTab方法跳转到对应页面
      url: '/pages/service/service?typeid=' + typeid + "&title=" + title + "&listtype=" + listtype, //后边参数其实无效可以直接写成:'/pages/service/service'
    }) 
  }, 

这样我们就把用户点击首页所传递的参数typeid存到缓存里边了

(2)第二步:在service中去获取typeid

在service.js中的onload或者onshow中加入typeid的方法,为了兼容用户是直接通过tabbar进入的情况,需要一个默认的typeid,参考代码:

复制代码
var stypeid = wx.getStorageSync('stypeid');//通过缓存获取typeid 
var typeid = stypeid ? stypeid : that.data.typeid; //如果stypeid存在读取,否则读取默认的typeid

然后我们可以直接通过getList()方法直接读取api获取内容列表了

复制代码
that.getList(typeid); 

说明:
(1)
如果你不是通过首页的show_service方法进入service页面的,那么就不会触发更新缓存,所以typeid的值是不会变的,通过点击tabbar进入service页面会永远显示某一个页面,你可以在onHide方法中增加一个重置或者情况stypied的方法,不过不建议这么弄

(2)service页面的切换栏目后,我们可以在switch_tab方法中加入修改缓存的方法,动态存入当前栏目的typeid

复制代码
switch_cat: function (e) { 
    var that = this; 
    var CATEGORYS = wx.getStorageSync('categorys')//调用栏目缓存 
    var data = e.currentTarget.dataset; 
    var typeid = data.typeid; 
    var listtype = data.listtype; 
    var curtypeid = data.typeid; 
    that.setData({ 
      curtypeid: curtypeid, 
      listtype: listtype, 
      page: 1 
    }) 
    wx.setNavigationBarTitle({ 
      title: CATEGORYS[curtypeid]['typename'] + '-' + wx.getStorageSync('system').seotitle 
    }); 
    that.getList(typeid); 
  }, 
相关推荐
00后程序员张42 分钟前
Web 前端工具全流程指南 从开发到调试的完整生态体系
android·前端·ios·小程序·uni-app·iphone·webview
说私域4 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的零售流量重构研究
人工智能·小程序·开源
鹧鸪云光伏与储能软件开发6 小时前
光伏开发小程序:快速获客,成交项目更迅速
大数据·微信小程序·小程序·光伏
晨旭缘8 小时前
解决小程序滚动穿透问题
小程序
游戏开发爱好者810 小时前
iOS 崩溃日志分析工具全指南,多工具协同构建稳定性分析体系
android·macos·ios·小程序·uni-app·cocoa·iphone
00后程序员张21 小时前
如何提高 IPA 安全性 多工具组合打造可复用的 iOS 加固与反编译防护体系(IPA 安全 iOS 加固 无源码混淆 Ipa Guard 实战)
android·安全·ios·小程序·uni-app·iphone·webview
游戏开发爱好者81 天前
Fiddler抓包实战教程 从安装配置到代理设置,详解Fiddler使用方法与调试技巧(HTTPHTTPS全面指南)
前端·测试工具·小程序·https·fiddler·uni-app·webview
sen_shan1 天前
《微信小程序》第五章:登录-API封装
微信小程序·小程序
2501_916007471 天前
Fastlane 结合 开心上架 命令行版本实现跨平台上传发布 iOS App
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张1 天前
iOS 26 内存占用监控 多工具协同下的性能稳定性分析实战
android·macos·ios·小程序·uni-app·cocoa·iphone