Vant4 Collapse 折疊面板

2023-02-16 17:56 更新

介紹

將一組內(nèi)容放置在多個折疊面板中,點擊面板的標題可以展開或收縮其內(nèi)容。

引入

通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。

import { createApp } from 'vue';
import { Collapse, CollapseItem } from 'vant';

const app = createApp();
app.use(Collapse);
app.use(CollapseItem);

代碼演示

基礎用法

通過 ?v-model? 控制展開的面板列表,?activeNames? 為數(shù)組格式。

<van-collapse v-model="activeNames">
  <van-collapse-item title="標題1" name="1">
    代碼是寫出來給人看的,附帶能在機器上運行。
  </van-collapse-item>
  <van-collapse-item title="標題2" name="2">
    技術無非就是那些開發(fā)它的人的共同靈魂。
  </van-collapse-item>
  <van-collapse-item title="標題3" name="3">
    在代碼閱讀過程中人們說臟話的頻率是衡量代碼質量的唯一標準。
  </van-collapse-item>
</van-collapse>
import { ref } from 'vue';

export default {
  setup() {
    const activeNames = ref(['1']);
    return { activeNames };
  },
};

手風琴

通過 ?accordion? 可以設置為手風琴模式,最多展開一個面板,此時 ?activeName? 為字符串格式。

<van-collapse v-model="activeName" accordion>
  <van-collapse-item title="標題1" name="1">
    代碼是寫出來給人看的,附帶能在機器上運行。
  </van-collapse-item>
  <van-collapse-item title="標題2" name="2">
    技術無非就是那些開發(fā)它的人的共同靈魂。
  </van-collapse-item>
  <van-collapse-item title="標題3" name="3">
    在代碼閱讀過程中人們說臟話的頻率是衡量代碼質量的唯一標準。
  </van-collapse-item>
</van-collapse>
import { ref } from 'vue';

export default {
  setup() {
    const activeName = ref('1');
    return { activeName };
  },
};

禁用狀態(tài)

通過 ?disabled? 屬性來禁用單個面板。

<van-collapse v-model="activeNames">
  <van-collapse-item title="標題1" name="1">
    代碼是寫出來給人看的,附帶能在機器上運行。
  </van-collapse-item>
  <van-collapse-item title="標題2" name="2" disabled>
    技術無非就是那些開發(fā)它的人的共同靈魂。
  </van-collapse-item>
  <van-collapse-item title="標題3" name="3" disabled>
    在代碼閱讀過程中人們說臟話的頻率是衡量代碼質量的唯一標準。
  </van-collapse-item>
</van-collapse>

自定義標題內(nèi)容

通過 ?title? 插槽可以自定義標題欄的內(nèi)容。

<van-collapse v-model="activeNames">
  <van-collapse-item name="1">
    <template #title>
      <div>標題1 <van-icon name="question-o" /></div>
    </template>
    代碼是寫出來給人看的,附帶能在機器上運行。
  </van-collapse-item>
  <van-collapse-item title="標題2" name="2" icon="shop-o">
    技術無非就是那些開發(fā)它的人的共同靈魂。
  </van-collapse-item>
</van-collapse>
import { ref } from 'vue';

export default {
  setup() {
    const activeNames = ref(['1']);
    return { activeNames };
  },
};

全部展開與全部切換

通過 ?Collapse? 實例上的 ?toggleAll? 方法可以實現(xiàn)全部展開與全部切換。

<van-collapse v-model="activeNames">
  <van-collapse-item title="標題1" name="1">
    代碼是寫出來給人看的,附帶能在機器上運行。
  </van-collapse-item>
  <van-collapse-item title="標題2" name="2">
    技術無非就是那些開發(fā)它的人的共同靈魂。
  </van-collapse-item>
  <van-collapse-item title="標題3" name="3">
    在代碼閱讀過程中人們說臟話的頻率是衡量代碼質量的唯一標準。
  </van-collapse-item>
</van-collapse>

<van-button type="primary" @click="openAll">全部展開</van-button>
<van-button type="primary" @click="toggleAll">全部切換</van-button>
import { ref } from 'vue';

export default {
  setup() {
    const activeNames = ref(['1']);
    const collapse = ref(null);

    const openAll = () => {
      collapse.value.toggleAll(true);
    }
    const toggleAll = () => {
      collapse.value.toggleAll();
    },

    return {
      activeNames,
      openAll,
      toggleAll,
      collapse,
    };
  },
};
Tips: 手風琴模式下無法使用 toggleAll 方法。

API

Collapse Props

參數(shù) 說明 類型 默認值
v-model 當前展開面板的 name 手風琴模式:number | string
非手風琴模式:(number | string)[]
-
accordion 是否開啟手風琴模式 boolean false
border 是否顯示外邊框 boolean true

Collapse Events

事件名 說明 回調(diào)參數(shù)
change 切換面板時觸發(fā) activeNames: 類型與 v-model 綁定的值一致

CollapseItem Props

參數(shù) 說明 類型 默認值
name 唯一標識符,默認為索引值 number | string index
icon 標題欄左側圖標名稱或圖片鏈接,等同于 Icon 組件的 name 屬性 string -
size 標題欄大小,可選值為 large string -
title 標題欄左側內(nèi)容 number | string -
value 標題欄右側內(nèi)容 number | string -
label 標題欄描述信息 number | string -
border 是否顯示內(nèi)邊框 boolean true
is-link 是否展示標題欄右側箭頭并開啟點擊反饋 boolean true
disabled 是否禁用面板 boolean false
readonly v3.0.12 是否為只讀狀態(tài),只讀狀態(tài)下無法操作面板 boolean false
lazy-render v3.4.5 是否在首次展開時才渲染面板內(nèi)容 boolean true
title-class 左側標題額外類名 string -
value-class 右側內(nèi)容額外類名 string -
label-class 描述信息額外類名 string -

Collapse 方法

通過 ref 可以獲取到 CollapseItem 實例并調(diào)用實例方法,詳見組件實例方法

方法名 說明 參數(shù) 返回值
toggleAll v3.5.3 切換所有面板展開狀態(tài),傳 true 為全部展開,false 為全部收起,不傳參為全部切換 options?: boolean | object -

toggleAll 方法示例

import { ref } from 'vue';
import type { CollapseInstance } from 'vant';

const collapseRef = ref<CollapseInstance>();

// 全部切換
collapseRef.value?.toggleAll();
// 全部展開
collapseRef.value?.toggleAll(true);
// 全部收起
collapseRef.value?.toggleAll(false);

// 全部全部切換,并跳過禁用的復選框
collapseRef.value?.toggleAll({
  skipDisabled: true,
});
// 全部選中,并跳過禁用的復選框
collapseRef.value?.toggleAll({
  expanded: true,
  skipDisabled: true,
});

CollapseItem 方法

通過 ref 可以獲取到 CollapseItem 實例并調(diào)用實例方法,詳見組件實例方法

方法名 說明 參數(shù) 返回值
toggle 切換面板展開狀態(tài),傳 true 為展開,false 為收起,不傳參為切換 expand?: boolean -

類型定義

組件導出以下類型定義:

import type {
  CollapseProps,
  CollapseItemProps,
  CollapseItemInstance,
  CollapseToggleAllOptions,
} from 'vant';

?CollapseItemInstance? 是組件實例的類型,用法如下:

import { ref } from 'vue';
import type { CollapseItemInstance } from 'vant';

const collapseItemRef = ref<CollapseItemInstance>();

collapseItemRef.value?.toggle();

CollapseItem Slots

名稱 說明
default 面板內(nèi)容
title 自定義標題欄左側內(nèi)容
value 自定義標題欄右側內(nèi)容
label v3.1.1 自定義標題欄描述信息
icon 自定義標題欄左側圖標
right-icon 自定義標題欄右側圖標

主題定制

樣式變量

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

名稱 默認值 描述
--van-collapse-item-duration var(--van-duration-base) -
--van-collapse-item-content-padding var(--van-padding-sm) var(--van-padding-md) -
--van-collapse-item-content-font-size var(--van-font-size-md) -
--van-collapse-item-content-line-height 1.5 -
--van-collapse-item-content-text-color var(--van-text-color-2) -
--van-collapse-item-content-background var(--van-background-2) -
--van-collapse-item-title-disabled-color var(--van-text-color-3) -


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號