• vant ui TabBar封装


    TabBar.vue基本上是放在App.vue里面,都存在

    <template>
      <div id="app">
        <home-tab-bar :tar-bar-config="tarBarConfig"></home-tab-bar>
        <router-view></router-view>
      </div>
    </template>

    我自己把TabBar.vue定义成一个全局组件。

    并且用的是自定义图标。如果用到了自定义图标,就需要定义插槽了。

    TabBar.vue

    <!-- 主页标签切换 -->
    <template>
      <div class="home-tab-bar">
        <van-tabbar
          v-model="defaultTarBarConfig.active"
          route
          :active-color="defaultTarBarConfig.activeColor"
          :inactive-color="defaultTarBarConfig.inactiveColor"
        >
          <van-tabbar-item
            v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
            :key="index"
            replace
            :name="item.label"
            :to="item.routerPath"
          >
            <span>{{item.label}}</span>
            <template #icon="props">
              <img :src="props.active ? item.icon.active : item.icon.inactive"  />
            </template>
          </van-tabbar-item>
        </van-tabbar>
      </div>
    </template>
    <script>
    export default {
      props: {
        tarBarConfig: {
          type: Object,
          required: true
        }
      },
      name: "HomeTabBar",
      data() {
        return {
          defaultTarBarConfig: {
            tabBarItemList: [
              // {
              //   label: "about", //文字标签
              //   routerPath: "/about", //路由
              //   icon: "home-o" //图标
              // },
            ],
            active: "", //默认激活的值
            activeColor: "#1989fa", //激活色
            inactiveColor: "#7d7e80" // 未选中标签的颜色 000
          }
        };
      },
      methods: {
        initDefaultTarBarConfig() {
          this.defaultTarBarConfig = {
            ...this.defaultTarBarConfig,
            ...this.tarBarConfig
          };
        }
      },
      created() {
        this.initDefaultTarBarConfig();
      }
    };
    </script>
    <style lang="less" scoped>
    </style>
    View Code

    index.js

    import HomeTabBar from './HomeTabBar'
    
    export default {
      //Vue.use()方法就会自动执行install
      install(Vue) {
        Vue.component(HomeTabBar.name, HomeTabBar) //组建的名字和组件
      }
    
    }
    外面传的props tarBarConfig
    tarBarConfig: {
            tabBarItemList: [
              {
                label: "about",
                routerPath: "/about",
                icon: {
                  active: require("assets/img/homeTabBar/aboutActive.png"),
                  inactive: require("assets/img/homeTabBar/aboutInactive.png")
                }
              },
              {
                label: "goods",
                routerPath: "/goods",
                icon: {
                  active: require("assets/img/homeTabBar/goodsAcitve.png"),
                  inactive: require("assets/img/homeTabBar/goodsInacitve.png")
                }
              },
              {
                label: "news",
                routerPath: "/news",
                icon: {
                  active: require("assets/img/homeTabBar/newsActive.png"),
                  inactive: require("assets/img/homeTabBar/newsInactive.png")
                }
              }
            ],
            active: "news", //默认激活的值
            activeColor: "#1989fa", //激活色
            inactiveColor: "#7d7e80" // 未选中标签的颜色 000
          }
    View Code

    第二种方式:直接使用vant里面的图标,就不需要定义插槽了。很简单的封装

     homeTabBar.vue

    <!-- 主页标签切换 -->
    <template>
      <div class="home-tab-bar">
        <van-tabbar
          v-model="defaultTarBarConfig.active"
          route
          :active-color="defaultTarBarConfig.activeColor"
          :inactive-color="defaultTarBarConfig.inactiveColor"
        >
          <van-tabbar-item
            v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
            :key="index"
            replace
            :name="item.label"
            :icon="item.icon"
            :to="item.routerPath"
          >
            {{item.label}}
          </van-tabbar-item>
        </van-tabbar>
      </div>
    </template>
    <script>
    export default {
      props: {
        tarBarConfig: {
          type: Object,
          required: true
        }
      },
      name: "HomeTabBar",
      data() {
        return {
          defaultTarBarConfig: {
            tabBarItemList: [
              // {
              //   label: "about", //文字标签
              //   routerPath: "/about", //路由
              //   icon: "home-o" //图标
              // },
            ],
            active: "", //默认激活的值 在item label中选择
            activeColor: "#1989fa", //激活色
            inactiveColor: "#7d7e80" // 未选中标签的颜色 000
          }
        };
      },
      methods: {
        initDefaultTarBarConfig() {
          this.defaultTarBarConfig = {
            ...this.defaultTarBarConfig,
            ...this.tarBarConfig
          };
        }
      },
      created() {
        this.initDefaultTarBarConfig();
      }
    };
    </script>
    <style lang="less" scoped>
    </style>
    View Code

    外面传的数据

    tarBarConfig: {
            tabBarItemList: [
              {
                label: "about",
                routerPath: "/about",
                icon: "home-o"
              },
              {
                label: "goods",
                routerPath: "/goods",
                icon: "home-o"
              },
              {
                label: "news",
                routerPath: "/news",
                icon: "home-o"
              }
            ],
            active: "news", //默认激活的值
            activeColor: "#1989fa", //激活色
            inactiveColor: "#7d7e80" // 未选中标签的颜色 000
          }
        };
    View Code
  • 相关阅读:
    JS监听组合按键
    XSS初体验
    debuggap,移动端调试新方式
    简析分页逻辑
    【译】Javascript中的数据类型
    【译】typeof null的前世今生
    一个跨域请求的XSS漏洞再续
    H5页面音频自动播放问题
    一个跨域请求的XSS续
    成功自我管理之压力管理
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/13405327.html
Copyright © 2020-2023  润新知