流浪的菜袅 2023-07-17 22:52 采纳率: 79.5%
浏览 36
已结题

小程序动态改变tabbar失效

微信小程序动态修改tabBar数据修改后,跳转报错

Unhandled promise rejection {errMsg: "switchTab:fail can not switch to no-tabBar page

因为在custom-tab-bar中页面跳转我是用wx.switchTab来跳转的,在点击多端登录后修改tabBar数据后跳转,为什么会报错?难道修改数据后新增的list页面数据不算tabBar页面吗?
然后就是修改完tabBar数据刷新的话,索引为0的tabBar页面是默认之前数据索引为0的首页,这是为什么啊?在点击tabBar后,页面会短暂的白屏闪烁,然后变成修改的tabBar

custom-tab-bar:

<cover-view class="root">
    <cover-view wx:for="{{tabBar.list}}" data-index="{{index}}" data-url="{{item.pagePath}}" class="tabView" bindtap="btnTab" wx:key="index">
        <cover-image class="imgView"  src="{{index === tabIndex ? item.selectedIconPath : item.iconPath}}"></cover-image>
        <cover-view wx:if="{{index == tabIndex}}"  style="padding: 5rpx;color: #DC351F;">{{item.text}}</cover-view>
        <cover-view wx:else="{{index != tabIndex}}"  style="padding: 5rpx;color: #000;">{{item.text}}</cover-view>
    </cover-view>
</cover-view>
// custom-tab-bar/index.js
const datas = {
    custom: true,
    color: "#000",
    selectedColor: "#DC351F",
    list: [
        {
            pagePath: "../index/index",
            text: "首页",
            iconPath: "../icons/shouye.png",
            selectedIconPath: "../icons/shouye-sele.png"
        },
        {
            pagePath: "../category/index",
            text: "分类",
            iconPath: "../icons/fenlei.png",
            selectedIconPath: "../icons/fenlei-sele.png"
        },
        {
            pagePath: "../cart/index",
            text: "购物车",
            iconPath: "../icons/gouwuche.png",
            selectedIconPath: "../icons/gouwuche-sele.png"
        },
        {
            pagePath: "../user/index",
            text: "我的",
            iconPath: "../icons/wode.png",
            selectedIconPath: "../icons/wode-sele.png"
        }
    ]
}
Page({
    /**
     * 页面的初始数据
     */
    data: {
        tabIndex:0,
        tabBar:wx.getStorageSync('tabBar') || datas,
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        console.log('tabBar',this.data.tabBar);
    },
    // 
    async btnTab(e) {
        this.setData({
            tabIndex:e.currentTarget.dataset.index
        })
        wx.switchTab({
          url: `${e.currentTarget.dataset.url}`,
        })
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})

这是多端登录触发修改tabBar数据的代码:

// 点击配送端登录
    async LoginCutEndFun(){
        let datas = {
            custom: true,
            color: "#000",
            selectedColor: "#DC351F",
            list: [
                {
                    pagePath: "../order/index",
                    text: "订单",
                    iconPath: "../icons/order.png",
                    selectedIconPath: "../icons/order-sele.png"
                },
                {
                    pagePath: "../user/index",
                    text: "我的",
                    iconPath: "../icons/wode.png",
                    selectedIconPath: "../icons/wode-sele.png"
                }
            ]
        }
        const tab = this.getTabBar()
        tab.setData({
            tabBar:datas
        })
        wx.setStorageSync('tabBar', datas)
        tab.setData({
            tabIndex: 1
        })
    },

大锅们,帮忙解答一下,谢谢

  • 写回答

1条回答 默认 最新

  • ZionHH 2023-07-18 09:57
    关注
    1. pagePath须是绝对路径,例如:/pages/home/index,所有tabbar需要在app.json tabBar.list里声明;
    2. 闪烁问题,将custom-tab-bar.js里的this.setData({ tabIndex:e.currentTarget.dataset.index })去掉。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月19日
  • 创建了问题 7月17日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀