微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

typescript编写微信小程序-自定义tab

配置

  1. 配置 app.json, 随便创建几个页面
{
  "tabBar": {
    "custom": true,
    "color": "#7A7E83",
    "selectedColor": "#3cc51f",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/test/index",
        "text": "test"
      },
      {
        "pagePath": "pages/tab/index",
        "text": "tab"
      }
    ]
  },
  ...
  "usingComponents": {
    "van-tabbar": "@vant/weapp/tabbar/index",
    "van-tabbar-item": "@vant/weapp/tabbar-item/index",
    "van-icon": "@vant/weapp/icon/index"
  }
}

tab组件

创建 custom-tab-bar 目录, 然后创建个组件

wxml

<van-tabbar active="{{ active }}" bind:change="onChange">
    <van-tabbar-item wx:for="{{ list }}" wx:key="index" icon="{{ item.icon }}">
        {{ item.text }}
    </van-tabbar-item>
</van-tabbar>

index.ts

Component({
    data: {
        active: 0,
        list: [
            {
                "url": "/pages/index/index",
                "icon": "wap-home-o",
                "text": "首页"
            },
            {
                "url": "/pages/test/index",
                "icon": "cluster-o",
                "text": "test"
            },
            {
                "url": "/pages/tab/index",
                "icon": "setting-o",
                "text": "tab"
            },
        ]
    },
    methods: {
        onChange(e) {
            this.setData({active: e.detail});
            wx.switchTab({
                url: this.data.list[e.detail].url
            });
        },
        init() {
            const page = getCurrentPages().pop();
            this.setData({
                // @ts-ignore
                active: this.data.list.findindex(item => item.url === `/${page.route}`)
            });
        }
    }
});

页面

页面的 onShow 生命周期调用 tab 组件的 init 方法

Page({
  onShow: function () {
    this.getTabBar().init();
  },
})

源码: https://github.com/NikolasSky/ts-miniprogram/tree/master/ts-miniprogram-tab

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐