Skip to content

List

概述

List 是一个 Vue 3 组件,用于显示一个可滚动的列表。该组件支持多种配置选项,如锁定状态、滚动条、初始位置等,并提供了丰富的事件处理机制。

引入

typescript
import { List } from 'sofast-extensions';

基本用法

html
<template>
  <List :items="items" :lock="false" :scroll="true" @handlerSelect="handleSelect" />
</template>

<script setup lang="ts">
import {List} from 'sofast-extensions';
import 'sofast-extensions/dist/style.css';

const items = [
  {icon: 'https://baidu.com/favicon.ico', name: '百度'},
  {icon: 'https://bilibili.com/favicon.ico', name: '哔哩哔哩'},
  {icon: 'https://www.douyin.com/favicon.ico', name: '抖音'},
  {icon: 'https://www.xiaohongshu.com/favicon.ico', name: '小红书'},
  {icon: 'https://www.toutiao.com/favicon.ico', name: '今日头条'},
];

const handleSelect = (item: SimpleItem) => {
  console.log('Selected item:', item);
};
</script>

以下为效果展示,按住 Ctrl + n 或者 Ctrl + p 或者箭头上下键即可上下移动,按住 enter 可以选择对应的选项,与如快的界面风格一致。

Props

属性名类型必须默认值描述
itemsSimpleItem[]-列表项数组。每个项包含 id, name, color, icon, type, others 等属性。
lockbooleanfalse是否锁定列表,锁定时无法通过点击或键盘导航选择项。
scrollbooleantrue是否启用滚动条。
initialPosnumber0初始选中的项索引。
iconSizestring-图标大小,默认为 21px
titlestring-列表标题。
pageSizenumber6每页显示的项数。
handlerSelect(item: SimpleItem) => void-选择项时的回调函数。
handlerImageError(item: SimpleItem) => void-图片加载失败时的回调函数。
handlerEnter(items: SimpleItem[], currentItem: number) => void-按下 Enter 键时的回调函数。
defaultIconstring-默认图标路径。
idHTMLAttributes['id']-列表的 ID。
classHTMLAttributes['class']-列表的类名。
handlerSelect(item: SimpleItem) => void-选择项时触发。
handlerImageError(item: SimpleItem) => void-图片加载失败时触发。
handlerEnter(items: SimpleItem[], currentItem: number) => void-按下 Enter 键时触发。
itemClass(item: SimpleItem) => HTMLAttributes['class']string-
activeClasssstring-item 激活时候的类名,如你想让 item 激活的时候有自己的过滤色,则可以使用这个属性
change(item: SimpleItem, index: number) => void-item 变化时执行的回调
truncateboolean-文字超过一行是否忽略

Slots

插槽名描述
default渲染每个列表项的内容(除了 icon和 name)。
currentItem当前选中的项。

方法

方法名返回类型描述
jumpTovoid跳转到指定索引的项。
getCurrentIndexnumber获取当前选中的项索引。
getItemHeightnumber获取列表项的高度。

示例代码

html
<template>
  <List :items="items" :lock="false" :scroll="true" @handlerSelect="handleSelect">
    <template #default="{ currentItem }">
      <div>
        <span>{{ currentItem.name }}</span>
        <span>{{ currentItem.color }}</span>
      </div>
    </template>
  </List>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { SimpleList } from 'your-package';

const items = ref([
  { id: 1, name: 'Item 1', color: 'red' },
  { id: 2, name: 'Item 2', color: 'blue' },
  { id: 3, name: 'Item 3', color: 'green' }
]);

const handleSelect = (item: SimpleItem) => {
  console.log('Selected item:', item);
};
</script>

注意事项

  • 列表项的高度会自动计算并应用到组件中。
  • 键盘导航支持 Ctrl + nCtrl + p 以及 ArrowDownArrowUp 键。