支付宝小程序 | 自定义tabBar

672 阅读1分钟

一、配置信息

app.json文件中进行配置, 在现有 tabBar 配置基础上新增customize字段。

 "tabBar": {
    "customize": true,
    "items": [
      {
        "pagePath": "pages/index1/index1",
        "name": "这是tabBar1"
      },
      {
        "pagePath": "pages/index2/index2",
        "name": "这是tabBar2"
      },
      {
        "pagePath": "pages/index3/index3",
        "name": "这是tabBar3"
      },
      {
        "pagePath": "pages/index4/index4",
        "name": "这是tabBar4"
      }
    ]
  }

二、 添加 tabBar 文件

image.png

结构目录如下:

├── customize-tab-bar       # 自定义 tabBar 文件
│   ├── index.less
│   ├── index.axml
│   ├── index.js
│   └── index.json
├── components
│   └── ...
├── pages
│   └── ...
├── app.less
├── app.js
├── app.json
├── mini.project.json
└── ...

三、编写 tabBar 代码

(一)、customize-tab-bar/index.axml

<tab-bar tabs="{{tabs}}" activeKey="{{selected}}" onChange="handleChange" class="tab-bar" activeColor="#285DFF" />

注意:这里使用的是antd-mini的TabBar组件,需要在app.json中引入该组件,可根据需求自行修改

(二)、customize-tab-bar/index.js

Component({
  mixins: [],
  data: {
    selected: 0,
    tabs: [
      {
        icon: "FireOutline",
        activeIcon: "FireFill",
        text: "这是tabBar1",
        path: "/pages/index1/index1"
      },
      {
        icon: "StarOutline",
        activeIcon: "StarFill",
        text: "这是tabBar2",
        path: "/pages/index2/index2"
      },
      {
        icon: "EditSOutline",
        activeIcon: "EditSFill",
        text: "这是tabBar3",
        path: "/pages/index3/index3"
      },
      {
        icon: "UserOutline",
        activeIcon: "HeartFill",
        text: "这是tabBar4",
        path: "/pages/index4/index4"
      }
    ]
  },
  props: {},
  didMount() {},
  didUpdate() {},
  didUnmount() {},
  methods: {
    handleChange(_: object, index: number) {
      this.setData({
        selected: index
      });
      my.switchTab({
        url: this.data.tabs[index].path
      });
    }
  }
});

(三)、customize-tab-bar/index.json

{
  "component": true
}

(四)、customize-tab-bar/index.less

.tab-bar {
  padding-top: 0.2rem;
  background-color: #fff;
}

四、编写tabbar对应的页面代码

(一)、 pages/index1/index1.js

Page({
  onShow() {
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 0,
      });
    }
  },
})

(二)、 pages/index2/index2.js

Page({
  onShow() {
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected:1,
      });
    }
  },
})

......