index.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <el-breadcrumb class="breadcrumb" :separator-icon="ArrowRight">
  3. <transition-group name="breadcrumb">
  4. <el-breadcrumb-item v-for="(item, index) in breadcrumbData" :key="index + 'id'">
  5. <span v-if="index === breadcrumbData.length - 1" class="no-redirect" style="color:black">{{ item.meta.title
  6. }}</span>
  7. <span v-else class="no-redirect">{{ item.meta.title }}</span>
  8. </el-breadcrumb-item>
  9. </transition-group>
  10. </el-breadcrumb>
  11. </template>
  12. <script setup>
  13. import { ref, watch } from "vue";
  14. import { useRoute, useRouter } from "vue-router";
  15. import { ArrowRight } from '@element-plus/icons-vue'
  16. const route = useRoute();
  17. const router = useRouter();
  18. // 生成数组数据
  19. const breadcrumbData = ref([]);
  20. const getBreadcrumbData = () => {
  21. breadcrumbData.value = route.matched.filter((item) => {
  22. console.log(item)
  23. return item.meta && item.meta.title;
  24. });
  25. };
  26. const goTo = (path)=> {
  27. router.push(path)
  28. }
  29. // 监听路由发生改变时触发
  30. watch(
  31. route,
  32. () => {
  33. getBreadcrumbData();
  34. },
  35. {
  36. immediate: true,
  37. }
  38. );
  39. </script>
  40. <style lang="css" scoped>
  41. .breadcrumb-enter-active,
  42. .breadcrumb-leave-active {
  43. transition: all 0.5s;
  44. }
  45. .breadcrumb-enter-from,
  46. .breadcrumb-leave-active {
  47. opacity: 0;
  48. transform: translateX(20px);
  49. }
  50. .breadcrumb-leave-active {
  51. position: absolute;
  52. }
  53. .breadcrumb{
  54. margin-bottom: 20px;
  55. }
  56. </style>