Skip to content

Chip 纸片 ​

可切换的过滤纸片:v-model:selected 控制选中状态,点击整枚纸片即可切换。 未选中时是描边样式,选中后填充 --ds-primary 并在前面显示勾选图标。

基础用法 ​

已选 1 项

vue
<script setup lang="ts">
import { reactive } from "vue";
import { Chip } from "@sharpdotnut/dotsharp";

const filters = reactive([
  { label: "有 Wi-Fi", selected: true },
  { label: "可携带宠物", selected: false },
  { label: "含早餐", selected: false },
]);
</script>

<template>
  <Chip
    v-for="filter in filters"
    :key="filter.label"
    v-model:selected="filter.selected"
    :label="filter.label"
  />
</template>

前置图标 ​

未选中时用 icon 给纸片加一个前置图标;选中后图标位置换成勾选图标。

vue
<script setup lang="ts">
import { ref } from "vue";
import { Chip } from "@sharpdotnut/dotsharp";
import favoriteIcon from "@iconify-icons/material-symbols/favorite";
import wifiIcon from "@iconify-icons/material-symbols/wifi";

const favoritesOnly = ref(false);
const enabled = ref(false);
</script>

<template>
  <Chip v-model:selected="favoritesOnly" label="收藏" :icon="favoriteIcon" />
  <Chip v-model:selected="enabled" label="Wi-Fi" :icon="wifiIcon" />
</template>

禁用 ​

vue
<Chip label="已禁用" disabled />
<Chip label="已选中" :selected="true" disabled />

禁用的纸片保留 aria-pressed,但不可点击、不可聚焦。

API ​

属性类型默认值说明
v-model:selectedbooleanfalse是否选中
labelstring—纯文本内容;存在默认插槽时被插槽覆盖
iconIconifyIcon | string—未选中时的前置图标,尺寸 1.25em
disabledbooleanfalse禁用:不可点击、不可聚焦
  • 根元素是 button,带 aria-pressed;其余属性与事件透传到该按钮。
  • 点击会切换 v-model:selected,不做任何额外的选中策略(多选由使用方自行管理)。
  • 默认插槽优先于 label,适合放徽标或混合内容。

可访问性 ​

纸片是原生 button,用 aria-pressed 表达选中状态,读屏会读作“已按下 / 未按下”的切换按钮。 键盘用空格或回车切换,焦点样式走 outline-ds-focus。