Skip to content

XtfTagGroup

组件说明

xtf-tag-group 是可选择、可删除的标签集合组件,适用于筛选条件和标签管理。既可由 options 数据驱动,也可与 xtf-tag-group-item 配合通过插槽渲染复杂条目。


基础用法

1. 数据驱动选择

vue
<template><xtf-tag-group v-model="selected" :options="options" /></template>
<script>
export default {
  data() {
    return {
      selected: ['new'],
      options: [
        { value: 'new', text: '新品' },
        { value: 'sale', text: '促销' }
      ]
    }
  }
}
</script>

2. 选择限制和删除

vue
<template>
  <xtf-tag-group
    v-model="selected"
    :options="options"
    closable
    :max="2"
    @change="changed"
    @delete="deleted"
    @selection-limit="limited"
    @update:options="options = $event"
  />
</template>
<script>
export default {
  data() {
    return {
      selected: [],
      options: [
        { value: 'a', text: 'A' },
        { value: 'b', text: 'B' },
        { value: 'c', text: 'C' }
      ]
    }
  },
  methods: {
    changed(p) {
      console.log(p.values)
    },
    deleted(p) {
      uni.showToast({ title: p.tag.text, icon: 'none' })
    },
    limited(p) {
      console.log(p.type)
    }
  }
}
</script>

3. 自定义条目插槽

插槽模式使用 xtf-tag-group-item 注册条目,插槽参数提供真实选中状态和操作函数。

vue
<template>
  <xtf-tag-group v-model="selected" :max="1">
    <xtf-tag-group-item value="fast" text="极速配送">
      <template #default="p">
        <xtf-card @click="p.toggle">
          <xtf-text :text="p.selected ? '已选择极速配送' : '选择极速配送'" /><xtf-button
            size="xs"
            label="移除"
            @click.stop="p.remove" /></xtf-card></template>
</xtf-tag-group-item>
  </xtf-tag-group>
</template>
<script>
export default {
  data() {
    return { selected: [] }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
optionsArray[]数据驱动的标签数组非插槽模式
valueArray | String | Number | BooleanundefinedVue 2 兼容的受控值旧式双向绑定
modelValueArray | String | Number | Booleanundefined优先级最高的受控值v-model
multipleBooleantrue是否多选单选筛选设为 false
maxNumber | String0最大选择数,0 不限制限制筛选数
minNumber | String0最小保留选择数,0 不限制必选标签
checkableBooleantrue全局是否允许选择仅展示标签
closableBooleanfalse全局是否允许删除标签管理
disabledBooleanfalse禁用所有标签不可编辑状态
layoutModeString'flow'flow 流式或 manager 单列管理布局管理列表
layoutString''manager 的兼容布局字段兼容已有数据
directionString'row'rowcolumn 排列方向流式布局
wrapBooleantrue流式布局是否换行单行横排
gapString | Number16条目间距调整密度
valueKeyString'value'options 的业务值字段名对接异构数据
labelKeyString'label'options 的显示字段名对接异构数据
themeString''默认标签主题统一语义色
variantString''默认标签变体统一外观
shapeString''默认标签形状统一外观
sizeString''默认标签尺寸统一密度
colorString''默认标签自定义颜色品牌色标签
customClassString''根节点类名局部定制
customStyleString | Object''根节点样式局部定制

options 每项支持的字段

字段类型默认值说明
value / valueKey 指定字段String | Number | Boolean索引标签业务值
text / label / labelKey 指定字段String值的字符串形式显示文字
keyString | Numbervalue唯一身份标识
disabledBooleanfalse禁用单个标签
checkableBoolean继承组属性覆盖单项可选状态
closableBoolean继承组属性覆盖单项可删除状态
theme / variant / shape / size / colorString继承组属性覆盖单项 xtf-tag 外观
其他 xtf-tag 属性Any-会透传给内部 xtf-tag

事件

事件名称触发时机回调参数参数说明
input选中值变化时(value: Array | Any)multiple 为假时返回单值
update:modelValue选中值变化时(value: Array | Any)用于 v-model
update:options删除条目时(tags: Array)删除后的序列化标签数组
change选中值变化时(payload: Object)选择变化完整数据
selection-change选中值变化时(payload: Object)change
selection-limit达到 maxmin 限制时(payload: Object){ type, max/min, tag, selectedValues, allTags }
tag-click点击条目时(payload: Object){ tag, item, index, selectedValues, allTags }
item-click点击条目时(payload: Object)tag-click
delete删除条目时(payload: Object){ tag, item, index, allTags, selectedValues, selectedTags }
remove删除条目时(payload: Object)delete
close删除条目时(payload: Object)delete

事件使用示例

vue
<template>
  <xtf-tag-group
    v-model="selected"
    :options="options"
    closable
    @change="change"
    @tag-click="click"
    @delete="remove"
  />
</template>
<script>
export default {
  data() {
    return { selected: [], options: [{ value: 'vip', text: '会员' }] }
  },
  methods: {
    change(p) {
      console.log('selected', p.values)
    },
    click(p) {
      console.log('click', p.index)
    },
    remove(p) {
      uni.showToast({ title: '已删除 ' + p.tag.text, icon: 'none' })
    }
  }
}
</script>

方法

1. getTags() — 获取全部当前标签

无参数,返回 Array,每项含 valuetextcheckedindex

vue
<template>
  <view>
    <xtf-button label="全部标签" @click="read" /><xtf-tag-group
      ref="group"
      :options="[{ value: 'a', text: 'A' }]"
  /></view>
</template>
<script>
export default {
  methods: {
    read() {
      console.log(this.$refs.group.getTags())
    }
  }
}
</script>

2. getSelectedValues() — 获取已选值

无参数,返回 Array

js
const values = this.$refs.group.getSelectedValues()

3. getSelectedTags() — 获取已选标签对象

无参数,返回 Array;每项结构与 getTags() 一致。

js
const tags = this.$refs.group.getSelectedTags()

主题说明

  • 间距由 var(--xtf-tag-group-gap) 控制,组件根据 gap 写入该变量。
  • 标签外观继承 xtf-tag 的主题变量和 themevariant 等属性。
  • xtf-config-provider 覆盖标签主题,或以组属性设置默认外观。

MIT Licensed