<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> 
 | 
export default { 
 | 
  data() { 
 | 
    return { 
 | 
      levelList: null 
 | 
    } 
 | 
  }, 
 | 
  watch: { 
 | 
    $route(route) { 
 | 
      // if you go to the redirect page, do not update the breadcrumbs 
 | 
      if (route.path.startsWith('/redirect/')) { 
 | 
        return 
 | 
      } 
 | 
      this.getBreadcrumb() 
 | 
    } 
 | 
  }, 
 | 
  created() { 
 | 
    this.getBreadcrumb() 
 | 
  }, 
 | 
  methods: { 
 | 
    getBreadcrumb() { 
 | 
      // only show routes with meta.title 
 | 
      let matched = this.$route.matched.filter(item => item.meta && item.meta.title) 
 | 
      const first = matched[0] 
 | 
  
 | 
      if (!this.isDashboard(first)) { 
 | 
        matched = [{ path: '/index', meta: { title: '首页' }}].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() === 'Index' 
 | 
    }, 
 | 
    handleLink(item) { 
 | 
      const { redirect, path } = item 
 | 
      if (redirect) { 
 | 
        this.$router.push(redirect) 
 | 
        return 
 | 
      } 
 | 
      this.$router.push(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> 
 |