1. 程式人生 > 其它 >vue 之麵包屑元件

vue 之麵包屑元件

技術標籤:vue 後臺元件

目錄

vue 之麵包屑元件

在這裡插入圖片描述

breadCrumb/BreadCrumb.vue

  • npm i path-to-regexp
  • path-to-regexp的使用教程可訪問 連結: link.
<template>
  <el-breadcrumb class="app-breadcrumb" separator="/">
    <transition-
group name="breadcrumb"> <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> <
a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> </el-breadcrumb-item> </transition-group> </el-breadcrumb> </template> <script> import pathToRegexp from 'path-to-regexp' export default { data() { return { levelList:
null } }, watch: { $route() { this.getBreadcrumb() } }, created() { this.getBreadcrumb() }, methods: { //獲取當前的 麵包屑 前提是 每一個路由裡面中的meta新增title getBreadcrumb() { // only show routes with meta.title let matched = this.$route.matched.filter(item => item.meta && item.meta.title) const first = matched[0] // 判斷最初固定的 面板 一般來說是home等! if (!this.isDashboard(first)) { matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched) } this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) }, isDashboard(route) { const name = route && route.name if (!name) { return false } return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase() }, pathCompile(path) { // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561 const { params } = this.$route var toPath = pathToRegexp.compile(path) return toPath(params) }, handleLink(item) { const { redirect, path } = item if (redirect) { this.$router.push(redirect) return } this.$router.push(this.pathCompile(path)) } } } </script> <style lang="scss" scoped> .app-breadcrumb.el-breadcrumb { display: inline-block; font-size: 14px; line-height: 50px; margin-left: 8px; .no-redirect { color: #97a8be; cursor: text; } } </style>

breadCrumb/index.js

/**
 * 是否粘性定位 元件
 */
import BreadCrumb from "./BreadCrumb.vue";
BreadCrumb.install = function(vue) {
  vue.component(BreadCrumb.name, BreadCrumb);
};
export default BreadCrumb;

mian.js

//引入 自定義元件
import BreadCrumb from '@/components/commom/breadCrumb/index.js'
Vue.use(BreadCrumb)

使用元件

<BreadCrumb />

路由的配置

export const constantRoutes = [
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: 'Dashboard', icon: 'dashboard' }
    }]
  },

  {
    path: '/example',
    component: Layout,
    redirect: '/example/table',
    name: 'Example',
    meta: { title: 'Example', icon: 'el-icon-s-help' },
    children: [
      {
        path: 'table',
        name: 'Table',
        component: () => import('@/views/table/index'),
        meta: { title: 'Table', icon: 'table' }
      },
      {
        path: 'tree',
        name: 'Tree',
        component: () => import('@/views/tree/index'),
        meta: { title: 'Tree', icon: 'tree' }
      }
    ]
  },
]