vue-router嵌套路由,默认子路由设置

需求:
1. 底部5个tab选项卡
2. 其中一个里面又有tab选项卡
3. 显示active状态
4. 底部选项卡和子路由的选项卡都默认选择第一个选项卡

举个栗子:
vue-router嵌套路由,默认子路由设置_第1张图片
示例是随便写的。

1.路由文件 router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import Brand from '@/components/Brand'
import Cart from '@/components/Cart'
import Member from '@/components/Member'
import Me from '@/components/Me'
import BrandA from '@/components/BrandA'
import BrandB from '@/components/BrandB'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/brand',
      component: Brand,
      redirect: '/brand/brand-a',
      children: [
        {
          path: 'brand-a',
          name: 'BrandA',
          component: BrandA
        },
        {
          path: 'brand-b',
          name: 'BrandB',
          component: BrandB
        }
      ]
    },
    {
      path: '/cart',
      name: 'Cart',
      component: Cart
    },
    {
      path: '/member',
      name: 'Member',
      component: Member
    },
    {
      path: '/me',
      name: 'Me',
      component: Me
    }
  ]
})

2.底部选项卡 Tabs.vue

<template>
  <div class="tabs">
    <ul>
      <router-link to="/" tag="li" exact>
        <div>
          <i class="icon iconfont icon-home">i>
        div>
        <div>Homediv>
      router-link>
      <router-link to="/brand" tag="li">
        <div>
          <i class="icon iconfont icon-zuanshi">i>
        div>
        <div>Branddiv>
      router-link>
      <router-link to="/cart" tag="li">
        <div>
          <i class="icon iconfont icon-gouwucheman">i>
        div>
        <div>Cartdiv>
      router-link>
      <router-link to="/member" tag="li">
        <div>
          <i class="icon iconfont icon-huiyuanqia">i>
        div>
        <div>Memberdiv>
      router-link>
      <router-link to="/me" tag="li">
        <div>
          <i class="icon iconfont icon-wo">i>
        div>
        <div>Mediv>
      router-link>
    ul>
  div>
template>

<script>
export default {
  name: 'Tabs',
  data () {
    return {

    }
  }
}
script>


<style scoped>
.tabs {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  background: #fff;
  padding: 5px 0;
}
.tabs ul {
  display: table;
  width: 100%;
}
.tabs ul li {
  display: table-cell;
  font-size: 16px;
}
.router-link-active {
  color: #f06;
}
style>

3.Brand.vue 底部选项卡其中一个页面(里面含有子路由)

<template>
  <div class="brand">
    <h1>Brandh1>
    <BrandTab>BrandTab>
  div>
template>

<script>
import BrandTab from "./BrandTab.vue"
export default {
  name: 'Brand',
  data () {
    return {

    }
  },
  components: {
    BrandTab
  }
}
script>


<style scoped>

style>

4.BrandTab.vue(Brand里面含有子路由的Tab)

<template>
  <div class="brand-tab">
    <ul>
      <router-link to="brand-a" tag="li" exact>
        <div>Brand-Adiv>
      router-link>
      <router-link to="brand-b" tag="li">
        <div>Brand-Bdiv>
      router-link>
    ul>
    <router-view/>
  div>
template>

<script>
export default {
  name: 'BrandTab',
  data () {
    return {

    }
  }
}
script>


<style scoped>
.brand-tab ul {
  width: 100%;
  display: table;
}
.brand-tab ul li {
  display: table-cell;
  border-bottom: 2px solid #ccc;
  padding: 4px 0;
}
.router-link-active {
  color: red;
  border-bottom: 2px solid red !important;
}

style>

你可能感兴趣的:(Vue,web前端)