面包屑组件

148 阅读1分钟

Bread

<template>
  <div class="xtx-bread">
    <slot />
    <!-- <div class="xtx-bread-item">
      <span>首页</span>
    </div>
    <i class="iconfont icon-angle-right"></i>
    <div class="xtx-bread-item">
      <span>美食</span>
    </div>
    <i class="iconfont icon-angle-right"></i>
    <div class="xtx-bread-item">
      <span>巧克力</span>
    </div> -->
  </div>
</template><script>
import { provide } from 'vue'
export default {
  name: 'XtxBread',
  props: {
    separator: {
      type: String
    }
  },
  setup (props) {
    provide('separator', props.separator)
  }
}
</script><style lang='less'>
.xtx-bread {
  display: flex;
  padding: 25px 10px;
  &-item {
    a {
      color: #666;
      transition: all 0.4s;
      &:hover {
        color: @xtxColor;
      }
    }
  }
  i {
    font-size: 12px;
    margin-left: 5px;
    margin-right: 5px;
  }
  .xtx-bread-item {
    // 最后一个i隐藏
    &:nth-last-of-type(1) {
      i {
        display: none;
      }
    }
  }
}
</style>

BreadItem

<template>
  <div class="xtx-bread-item">
    <!-- 1. 是否可点击跳转 -->
    <RouterLink v-if="to" :to="to"><slot /></RouterLink>
    <span v-else><slot /></span>
    <!-- 2. 是否传入分隔符 -->
    <i v-if="separator">{{ separator }}</i>
    <i v-else class="iconfont icon-angle-right"></i>
  </div>
</template><script>
import { inject } from 'vue'
export default {
  name: 'XtxBreadItem',
  props: {
    to: String
  },
  setup () {
    const separator = inject('separator')
    return { separator }
  }
}
</script>

使用

      <!-- 面包屑 -->
      <XtxBread separator=">" v-if="detail.categories">
        <XtxBreadItem to="/">首页</XtxBreadItem>
        <XtxBreadItem to="/">{{ detail.categories[1].name }}</XtxBreadItem>
        <XtxBreadItem to="/">{{ detail.categories[0].name }}</XtxBreadItem>
      </XtxBread>