Vant4 TreeSelect 分類選擇

2023-02-16 17:57 更新

介紹

用于從一組相關(guān)聯(lián)的數(shù)據(jù)集合中進(jìn)行選擇。

引入

通過以下方式來全局注冊(cè)組件,更多注冊(cè)方式請(qǐng)參考組件注冊(cè)。

import { createApp } from 'vue';
import { TreeSelect } from 'vant';

const app = createApp();
app.use(TreeSelect);

代碼演示

單選模式

?item? 為分類顯示所需的數(shù)據(jù),數(shù)據(jù)格式見下方示例。?main-active-index? 表示左側(cè)高亮選項(xiàng)的索引,?active-id? 表示右側(cè)高亮選項(xiàng)的 id。

<van-tree-select
  v-model:active-id="activeId"
  v-model:main-active-index="activeIndex"
  :items="items"
/>
import { ref } from 'vue';

export default {
  setup() {
    const activeId = ref(1);
    const activeIndex = ref(0);
    const items = [
      {
        text: '浙江',
        children: [
          { text: '杭州', id: 1 },
          { text: '溫州', id: 2 },
          { text: '寧波', id: 3, disabled: true },
        ],
      },
      {
        text: '江蘇',
        children: [
          { text: '南京', id: 4 },
          { text: '無錫', id: 5 },
          { text: '徐州', id: 6 },
        ],
      },
      { text: '福建', disabled: true },
    ];

    return {
      items,
      activeId,
      activeIndex,
    };
  },
};

多選模式

?active-id? 為數(shù)組格式時(shí),可以選中多個(gè)右側(cè)選項(xiàng)。

<van-tree-select
  v-model:active-id="activeIds"
  v-model:main-active-index="activeIndex"
  :items="items"
/>
import { ref } from 'vue';

export default {
  setup() {
    const activeId = ref([1, 2]);
    const activeIndex = ref(0);
    const items = [
      {
        text: '浙江',
        children: [
          { text: '杭州', id: 1 },
          { text: '溫州', id: 2 },
          { text: '寧波', id: 3, disabled: true },
        ],
      },
      {
        text: '江蘇',
        children: [
          { text: '南京', id: 4 },
          { text: '無錫', id: 5 },
          { text: '徐州', id: 6 },
        ],
      },
      { text: '福建', disabled: true },
    ];

    return {
      items,
      activeId,
      activeIndex,
    };
  },
};

自定義內(nèi)容

通過 ?content? 插槽可以自定義右側(cè)區(qū)域的內(nèi)容。

<van-tree-select
  v-model:main-active-index="activeIndex"
  height="55vw"
  :items="items"
>
  <template #content>
    <van-image
      v-if="activeIndex === 0"
      src="https://fastly.jsdelivr.net/npm/@vant/assets/apple-1.jpeg" rel="external nofollow" 
    />
    <van-image
      v-if="activeIndex === 1"
      src="https://fastly.jsdelivr.net/npm/@vant/assets/apple-2.jpeg" rel="external nofollow" 
    />
  </template>
</van-tree-select>
import { ref } from 'vue';

export default {
  setup() {
    const activeIndex = ref(0);
    return {
      activeIndex,
      items: [{ text: '分組 1' }, { text: '分組 2' }],
    };
  },
};

徽標(biāo)提示

設(shè)置 ?dot? 屬性后,會(huì)在圖標(biāo)右上角展示一個(gè)小紅點(diǎn);設(shè)置 ?badge? 屬性后,會(huì)在圖標(biāo)右上角展示相應(yīng)的徽標(biāo)。

<van-tree-select
  v-model:main-active-index="activeIndex"
  height="55vw"
  :items="items"
/>
import { ref } from 'vue';

export default {
  setup() {
    const activeIndex = ref(0);
    return {
      activeIndex,
      items: [
        {
          text: '浙江',
          children: [
            { text: '杭州', id: 1 },
            { text: '溫州', id: 2 },
            { text: '寧波', id: 3, disabled: true },
          ],
          dot: true,
        },
        {
          text: '江蘇',
          children: [
            { text: '南京', id: 4 },
            { text: '無錫', id: 5 },
            { text: '徐州', id: 6 },
          ],
          badge: 5,
        },
      ],
    };
  },
};

API

Props

參數(shù) 說明 類型 默認(rèn)值
items 分類顯示所需的數(shù)據(jù) TreeSelectItem[] []
height 高度,默認(rèn)單位為px number | string 300
main-active-index 左側(cè)選中項(xiàng)的索引 number | string 0
active-id 右側(cè)選中項(xiàng)的 id,支持傳入數(shù)組 number | string |
(number | string)[]
0
max 右側(cè)項(xiàng)最大選中個(gè)數(shù) number | string Infinity
selected-icon 自定義右側(cè)欄選中狀態(tài)的圖標(biāo) string success

Events

事件名 說明 回調(diào)參數(shù)
click-nav 點(diǎn)擊左側(cè)導(dǎo)航時(shí)觸發(fā) index: number
click-item 點(diǎn)擊右側(cè)選擇項(xiàng)時(shí)觸發(fā) item: TreeSelectChild

Slots

名稱 說明
content 自定義右側(cè)區(qū)域內(nèi)容

TreeSelectItem 數(shù)據(jù)結(jié)構(gòu)

?TreeSelectItem? 整體為一個(gè)數(shù)組,數(shù)組內(nèi)包含一系列描述分類的對(duì)象,每個(gè)分類里,?text? 表示當(dāng)前分類的名稱,?children? 表示分類里的可選項(xiàng)。

[
  {
    // 導(dǎo)航名稱
    text: '所有城市',
    // 導(dǎo)航名稱右上角徽標(biāo)
    badge: 3,
    // 是否在導(dǎo)航名稱右上角顯示小紅點(diǎn)
    dot: true,
    // 導(dǎo)航節(jié)點(diǎn)額外類名
    className: 'my-class',
    // 該導(dǎo)航下所有的可選項(xiàng)
    children: [
      {
        // 名稱
        text: '溫州',
        // id,作為匹配選中狀態(tài)的標(biāo)識(shí)符
        id: 1,
        // 禁用選項(xiàng)
        disabled: true,
      },
      {
        text: '杭州',
        id: 2,
      },
    ],
  },
];

類型定義

組件導(dǎo)出以下類型定義:

import type { TreeSelectItem, TreeSelectChild, TreeSelectProps } from 'vant';

主題定制

樣式變量

組件提供了下列 CSS 變量,可用于自定義樣式,使用方法請(qǐng)參考 ConfigProvider 組件。

名稱 默認(rèn)值 描述
--van-tree-select-font-size var(--van-font-size-md) -
--van-tree-select-nav-background var(--van-background) -
--van-tree-select-content-background var(--van-background-2) -
--van-tree-select-nav-item-padding 14px var(--van-padding-sm) -
--van-tree-select-item-height 48px -
--van-tree-select-item-active-color var(--van-primary-color) -
--van-tree-select-item-disabled-color var(--van-gray-5) -
--van-tree-select-item-selected-size 16px -


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)