zoukankan      html  css  js  c++  java
  • 小程序使用vantUI自定义tabBar

    创建自定义tabBar文件
    创建一个与 /pages 的同级目录,命名为 /custom-tab-bar(必须是custom-tab-bar这个名称),注意目录层级与目录命名问题,不可用其他名称命名。在 /custom-tab-bar 下创建四个文件:

    index.js
    index.json
    index.wxml
    index.wxss
    

    index.js
    在index.js中定义相关数据

    • action : 当前被点击tab的索引
    • list : tab列表

    以及一个切换tab时触发的方法:

    • function onChange(event) : 标签切换时触发,修改 active值,点亮被点击的 tab 并进行页面跳转
    Component({
      data: {
        // 选中的 tab 
        active: null,
        // 菜单列表
        list: [
          {
            pagePath: '/pages/subscriptions/subscriptions',
            text: '订阅',
            name: 'subscriptions',
            icon: 'bullhorn-o'
          },
          {
            pagePath: '/pages/profile/profile',
            text: '我的',
            name: 'profile',
            icon: 'user-o'
          }
        ]
      },
      methods: {
        // 标签切换
        onChange: function (event) {
          this.setData({ active: event.detail })
          wx.switchTab({
            url: this.data.list[event.detail].pagePath,
          })
        }
      }
    })
    

    index.json
    在index.js中,将component参数值设置为true,代表这是一个自定义组件:

    {
        "compoent": true
    }
    

    因为我使用了Vant Weapp的tabBar标签栏,所以还需要引入额外的组件:

    {
      "component": true,
      "usingComponents": {
        "van-tabbar": "@vant/weapp/tabbar/index",
        "van-tabbar-item": "@vant/weapp/tabbar-item/index",
        "van-icon": "@vant/weapp/icon/index"
      }
    }
    

    ps:这里的路径以实际项目的路径为准
    index.wxml
    在index.wxml中定义组件形态,我在此使用Vant Weapp的tabBar标签栏,详见代码:

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

    app.json
    在app.json中配置参数如下:

    • usingComponents : 仅声明即可
    • tabBar : tabBar组件的具体配置
      • custom : 设为 true ,表示使用自定义组件
      • list : tab 页列表,在列表中的页面将被设置为 tab 页,自动加载 tabBar
    {
        "usingComponents":{
    
        },
        "tabBar":{
            "custom":true,
            "color":"#000000",
            "selectedColor":"#000000",
            "backgroundColor":"#000000",
            "list":[
                {
                    "pagePath":"pages/subscriptions/index",
                    "text":"订阅",
                    "iconPath":"",
                    "selectedIconPath":""
                },
                {
                    "pagePath":"pages/user/index",
                    "text":"关于我",
                    "iconPath":"",
                    "selectedIconPath":""
                }
            ]
        }
    }
    

    实现tabBar选中态
    根据微信官方文档描述,每个 tab 页面 tabBar 的实例是不同的:

    每个 tab 页下的自定义 tabBar 组件实例是不同的,可通过自定义组件下的 getTabBar 接口,获取当前页面的自定义 tabBar 组件实例。

    显而易见,每当切换 tab 页时,我们都需要更新 tabBar 的选中态。关于选中态的实现,官方文档描述如下:

    注意:如需实现 tab 选中态,要在当前页面下,通过 getTabBar 接口获取组件实例,并调用 setData 更新选中态。

    我们可以在使用到 tabBar 的页面中这样实现:

    Page({
      onShow: function () {
        if (typeof this.getTabBar === 'function' && this.getTabBar()) {
          this.getTabBar().setData({
            // 当前页面的 tabBar 索引
            active: 1
          })
        }
      }
    })
    

    至此,一个自定义 tabBar 的实现已全部完成。

    原文链接:https://cloud.tencent.com/developer/article/1739272

  • 相关阅读:
    JsonParse类
    vs2013提交项目到github
    js选中select
    按每20条分组查询
    批量修改图片格式
    当前日期后10天日期
    C#生成不重复随机数的方法
    接收端通过Request.InputStream读取流
    C#文件流的读写
    C#中HttpWebRequest的用法详解
  • 原文地址:https://www.cnblogs.com/BigFatStar/p/14500499.html
Copyright © 2011-2022 走看看