《vue3从零搭建一个后台》(六)、导航栏的配置

NavBar (导航栏)

创建 src/layout/components/NavBar.vue





这里优化一下。/layout/components 文件夹的管理
创建src/layout/components/index.js

export { default as Navbar } from './Navbar'
export { default as Sidebar } from './Sidebar'
// 引用方式
//import { Navbar, Sidebar } from './components/'
// './components/'  它会优先在 components 文件夹下寻找index.js文件
// 其次会是 index.vue 文件。这样做是方便维护
// 不再是
//import Navbar from './components/Navbar .vue'
//import Sidebar from './components/Sidebar.vue'

src/layout/index.vue。改造后 引入 Navbar组件




...
样式

运行后的页面

接下来是数据的动态化处理

改造src/router/index.js 加入测试的三个路由
加入meta属性,用于传递参数

export const routes = [
  {
    path: '/',
    component: Layout,
    name: '主页',
    meta: {
      title: '主页'
    }
    // component: () => import('@/views/home/index')
  },
  {
    path: '/dog',
    component: Layout,
    name: '狗子世界',
    meta: {
      title: '狗子世界'
    },
    // component: () => import('@/views/home/index')
    children: [
      {
        path: '/erha',
        name: '哈士奇',
        meta: {
          title: '哈士奇'
        },
        component: () => import('@/views/home/index')
      },
      {
        path: '/jinmao',
        name: '金毛',
        meta: {
          title: '金毛'
        },
        component: () => import('@/views/home/index')
      },
      {
        path: '/taidi',
        name: '泰迪',
        meta: {
          title: '泰迪'
        },
        component: () => import('@/views/home/index')
      }
    ]
  }
]

NavBar.vue改造

  
    
      
        {{ item.meta.title }}
      
    

//script
export default {
  name: 'Navbar',
  props: {
    open: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      levelList: null
    }
  },
  watch: {
    $route() {
      this.getBreadcrumb()
    }
  },
  created() {
    this.getBreadcrumb()
  },
  methods: {
    switchSidebar() {
      this.$emit('switchSidebar')
    },
    getBreadcrumb() {
      // 获取路由对应title   && 存在返回右边,不存在返回左边
      const matched = this.$route.matched.filter(item => item.meta && item.meta.title)
      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
    }
  }
}
效果展示

接下来是标签

路由标签

创建/layout/components/ScrollPane.vue 标签多是启动滚动
ScrollPane.vue