Skip to content

xtf-breadcrumb

组件说明

xtf-breadcrumb 是面包屑导航组件,用于展示当前页面在层级结构中的位置路径。支持省略折叠、多种视觉变体(纯文本、柔和、胶囊、描边、下划线)、自动导航和图标定制,适用于后台管理、文件目录和商品分类等层级导航场景。


基础用法

1. 最简示例

通过 items 传入路径数组,最后一项自动高亮为当前页:

vue
<template>
  <xtf-breadcrumb :items="items" @click="onClick" />
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '商品管理', path: '/pages/goods/list' },
        { label: '商品详情' }
      ]
    }
  },
  methods: {
    onClick({ item, index }) {
      console.log('点击了:', item.label)
    }
  }
}
</script>

2. 省略折叠

通过 maxCount 限制显示数量,超出部分自动折叠为省略号,ellipsisMode 控制省略位置:

vue
<template>
  <view>
    <xtf-text level="caption" color="secondary">中间省略</xtf-text>
    <xtf-breadcrumb
      :items="items"
      :max-count="3"
      ellipsis-mode="middle"
      @ellipsis-click="onEllipsisClick"
    />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">开头省略</xtf-text>
    <xtf-breadcrumb
      :items="items"
      :max-count="3"
      ellipsis-mode="start"
      @ellipsis-click="onEllipsisClick"
    />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">末尾省略</xtf-text>
    <xtf-breadcrumb
      :items="items"
      :max-count="3"
      ellipsis-mode="end"
      @ellipsis-click="onEllipsisClick"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '商品管理', path: '/pages/goods/list' },
        { label: '电子产品', path: '/pages/goods/electronics' },
        { label: '手机', path: '/pages/goods/phone' },
        { label: 'iPhone 15' }
      ]
    }
  },
  methods: {
    onEllipsisClick({ hiddenItems, hiddenCount }) {
      uni.showToast({ title: '隐藏了 ' + hiddenCount + ' 项', icon: 'none' })
    }
  }
}
</script>

3. 视觉变体

通过 variant 切换视觉风格:'plain' / 'soft' / 'pill' / 'outline' / 'underline'

vue
<template>
  <view>
    <xtf-text level="caption" color="secondary">纯文本</xtf-text>
    <xtf-breadcrumb :items="items" variant="plain" />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">柔和</xtf-text>
    <xtf-breadcrumb :items="items" variant="soft" />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">胶囊</xtf-text>
    <xtf-breadcrumb :items="items" variant="pill" />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">描边</xtf-text>
    <xtf-breadcrumb :items="items" variant="outline" />

    <xtf-text level="caption" color="secondary" style="margin-top: 24rpx">下划线</xtf-text>
    <xtf-breadcrumb :items="items" variant="underline" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '设置', path: '/pages/settings/index' },
        { label: '账户' }
      ]
    }
  }
}
</script>

4. 图标与分隔符

通过 showHomeIcon 在首项显示首页图标,通过 separatorIcon 使用图标分隔符,items 每项支持 icon 字段:

vue
<template>
  <xtf-breadcrumb
    :items="items"
    show-home-icon
    separator-icon="chevron-right"
    theme="info"
    @click="onClick"
  />
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '订单管理', path: '/pages/order/list', icon: 'list' },
        { label: '订单详情' }
      ]
    }
  },
  methods: {
    onClick({ item }) {
      console.log('导航到:', item.path)
    }
  }
}
</script>

5. 自动导航

通过 autoNavigate 启用点击自动跳转,items 每项的 path 作为跳转地址,openType 控制跳转方式:

vue
<template>
  <xtf-breadcrumb :items="items" auto-navigate @navigate="onNavigate" />
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '商品列表', path: '/pages/goods/list' },
        { label: '商品详情', path: '/pages/goods/detail', openType: 'navigateTo' }
      ]
    }
  },
  methods: {
    onNavigate({ item, method }) {
      console.log('跳转方式:', method, '路径:', item.path)
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
itemsArray[]路径数据数组,每项字段见下方子表核心数据源
separatorString'/'分隔符文字自定义分隔符
separatorIconString''分隔符图标名,设置后替代文字分隔符使用图标分隔
maxCountString | Number4最大显示项数,超出折叠为省略号长路径折叠
ellipsisTextString'...'省略项显示文字自定义省略文案
ellipsisModeString'middle'省略位置:'middle' 中间 / 'start' 开头 / 'end' 末尾控制折叠位置
themeString'primary'主题色:'primary' / 'success' / 'warning' / 'danger' / 'info' / 'inverse'切换主题色
variantString'plain'视觉变体:'plain' / 'soft' / 'pill' / 'outline' / 'underline'切换视觉风格
sizeString'md'尺寸:'sm' / 'md' / 'lg'控制字号和间距
blockBooleanfalse是否占满整行宽度块级布局
roundBooleanfalse是否圆角样式圆角风格
showHomeIconBooleanfalse是否在首项显示首页图标首页图标
homeIconString'home'首页图标名自定义首页图标
activeColorString''自定义当前项颜色精确控制高亮色
inactiveColorString''自定义非当前项颜色精确控制文字色
separatorColorString''自定义分隔符颜色精确控制分隔符色
backgroundString''自定义背景色(soft/pill 变体)精确控制背景色
borderColorString''自定义边框色(outline 变体)精确控制边框色
autoNavigateBooleanfalse是否点击自动跳转页面自动导航
customClassString''自定义类名样式覆盖
customStyleString | Object | Array''自定义样式动态样式覆盖

items 数组每项支持的字段

字段类型默认值说明
labelString项显示文字(必填),也兼容 title
pathString''跳转路径,autoNavigate 时使用
iconString''项前图标名
dotBooleanfalse是否显示圆点指示
metaString''辅助信息文字
clickableBooleantrue是否可点击,设为 false 禁止点击
disabledBooleanfalse是否禁用,禁用后不可点击且半透明
highlightBooleanfalse是否高亮加粗
openTypeString'navigateTo'跳转方式:'navigateTo' / 'redirectTo' / 'switchTab' / 'reLaunch',也兼容 navigationType
styleString | Object''单项自定义样式
keyString唯一标识

事件

事件名称触发时机回调参数参数说明
click点击非当前项时触发(disabled / clickable=false 不触发)(payload: { item: Object, index: Number })item 为点击项数据,index 为索引
ellipsis-click点击省略项时触发(payload: { item: Object, index: Number, hiddenItems: Array, hiddenCount: Number })hiddenItems 为被隐藏的项数组
navigate自动导航跳转后触发(需 autoNavigate(payload: { item: Object, index: Number, method: String })method 为跳转方式

事件使用示例

vue
<template>
  <xtf-breadcrumb
    :items="items"
    :max-count="2"
    @click="onClick"
    @ellipsis-click="onEllipsisClick"
  />
</template>

<script>
export default {
  data() {
    return {
      items: [{ label: '首页', path: '/pages/index/index' }, { label: '商品' }, { label: '详情' }]
    }
  },
  methods: {
    onClick({ item, index }) {
      console.log('点击路径', item, index)
    },
    onEllipsisClick({ hiddenItems }) {
      console.log('隐藏路径', hiddenItems)
    }
  }
}
</script>

插槽

插槽名作用域参数说明
item{ item, index, active, ellipsis }替换路径项。
separator{ item, index }替换路径分隔符。

插槽使用示例

vue
<template>
  <xtf-breadcrumb :items="items" :max-count="3">
    <template #item="{ item, active, ellipsis }">
      <text :style="{ color: active ? '#2563eb' : '#64748b' }">
        {{ ellipsis ? '更多' : item.label }}
      </text>
    </template>
    <template #separator="{ index }">
      <text style="margin: 0 8rpx; color: #94a3b8">{{ index === 0 ? '>' : '/' }}</text>
    </template>
  </xtf-breadcrumb>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { label: '首页', path: '/pages/index/index' },
        { label: '商品管理', path: '/pages/goods/list' },
        { label: '手机' },
        { label: '详情' }
      ]
    }
  }
}
</script>

主题说明

  • 当前项颜色使用 var(--xtf-breadcrumb-active),非当前项使用 var(--xtf-breadcrumb-inactive)
  • 分隔符颜色使用 var(--xtf-breadcrumb-separator)
  • soft / pill 变体背景使用 var(--xtf-breadcrumb-soft),边框透明
  • outline 变体边框使用 var(--xtf-breadcrumb-border)
  • underline 变体当前项下划线颜色跟随 --xtf-breadcrumb-active
  • 字号使用 var(--xtf-breadcrumb-font-size),辅助信息字号使用 var(--xtf-breadcrumb-meta-size)
  • 间距使用 var(--xtf-breadcrumb-gap),内边距使用 var(--xtf-breadcrumb-padding)

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖上述 CSS 变量。

MIT Licensed