微信小程序--自定义tabbar切换页面时,保留数据方案
自定义的tabbar组件,每次切换页面时都会重新加载页面和数据,需要通过一些方法把tabbar菜单的数据保留下来,不要每次都请求数据。
方案一:在app.js文件里定义全局数据(本次项目采用的是可以在后台管理里配置的数据,所以采用了方案一)
1、在app.js文件里定义一个全局变量
App({globalData: {tabbarlist:{}}})2、在tabbar组件的js文件获取app.js保留的数据const app = getApp();Component({ready() {//将保留数据赋值给tabbar的listthis.setData({list:app.globalData.decorateTabbar})如果是第一次加载,保留的数据是空的,则需要请求接口获取数据if (!isEmpty(app.globalData.decorateTabbar)) this.getDecorateData();},methods: {getDecorateData() {getshopDecorate().then(({ data }) => {//处理数据let arr = data.find((element) => {return element.isShow && element.type == "tabbar";});arr.ext = JSON.parse(arr.ext);let arr2 = arr.ext.filter((ele) => {if (ele.isShow) return ele;});给当前页面的list和保留的数据赋值
if (!isEmpty(app.globalData.decorateTabbar)) {this.setData({list: { isShow: arr.isShow, ext: arr2 },});}app.globalData.decorateTabbar = { isShow: arr.isShow, ext: arr2 };});},})}
方案二:使用缓存机制(如果tabbar的数据一旦定义就不在变动,可以采用这种方案)
wx.setStorageSync('someData', 'Hello World');//在获取到数据时存储到缓存里var someData = wx.getStorageSync('someData'); console.log(someData); // 输出:Hello World //切换再进入页面时,从缓存种读取数据
方案三:使用组件通信,
当 TabBar 切换页面时,通过自定义事件或消息订阅机制,将数据传递给目标页面。
1、在目标页面中监听事件或订阅消息,并在相应的回调函数中处理数据:
Page({ onLoad: function() { var that = this; wx.onAppShow(function(data) { console.log(data); // 输出:Hello World that.setData({ someData: data }); }); } });
2、在切换页面时,触发相应的事件或发布消息,并将数据传递给目标页面:wx.onTabItemTap(function(item) { wx.triggerEvent('onAppShow', 'Hello World'); })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗