SuperAPI AI 工具集

syncfusion-angular-list-box

前端与建站

查看项目

更新于 10-16 04:02

技能介绍

用途

Syncfusion Angular ListBox 组件用于让用户从预定义列表中选中一个或多个项目,适用于构建交互式列表界面。它可作为下拉列表的替代方案,支持数据绑定、模板、拖放、排序、分组以及较完整的无障碍特性。

主要能力

  • 多种选择模式:支持单选、多选(配合 SHIFT/CTRL)以及复选框选择,并提供全选功能。
  • 数据绑定:可绑定本地字符串数组、对象数组、复杂嵌套对象,或通过 DataManager 与 Query 绑定远程数据;支持字段映射(text、value、groupBy、iconCss 等)。
  • 拖放:支持单个 ListBox 内拖放重排,也支持双 ListBox 之间拖放转移;提供 dragStart、drag、drop 等事件,并可通过 scope 配置关联多个列表。
  • 自定义与样式:支持图标与 iconCss 字段映射、自定义项目模板、按类别分组、升序/降序排序、CSS 样式与主题定制、Theme Studio 集成以及响应式设计。
  • 过滤与大数据集:支持内置过滤搜索栏、过滤类型(StartsWith、EndsWith、Contains),并可为大数据集启用滚动条。
  • 无障碍:符合 WCAG 2.2,支持屏幕阅读器和键盘导航。
  • 性能:针对大数据集进行高效渲染。

使用方式

安装并引入 @syncfusion/ej2-angular-dropdowns 中的 ListBoxModule,在组件模板中使用 <ejs-listbox> 标签,通过 [dataSource] 绑定数据,通过 [selectionSettings] 配置选择模式。样式需在全局样式文件中导入相关主题 CSS,例如 material3 主题下的 base、dropdowns、inputs、lists 样式。

基本示例:

import { Component, OnInit } from '@angular/core';
import { ListBoxModule } from '@syncfusion/ej2-angular-dropdowns';

@Component({
  imports: [ListBoxModule],
  standalone: true,
  selector: 'app-listbox',
  template: `
    <ejs-listbox 
      [dataSource]="items"
      [selectionSettings]="{ mode: 'Multiple' }">
    </ejs-listbox>
  `
})
export class ListBoxComponent implements OnInit {
  public items: { [key: string]: Object }[] = [];

  ngOnInit(): void {
    this.items = [
      { text: 'Option 1', id: '1' },
      { text: 'Option 2', id: '2' },
      { text: 'Option 3', id: '3' }
    ];
  }
}

样式导入:

/* In your global styles.css */
@import '@syncfusion/ej2-base/styles/material3.css';
@import '@syncfusion/ej2-dropdowns/styles/material3.css';
@import '@syncfusion/ej2-inputs/styles/material3.css';
@import '@syncfusion/ej2-lists/styles/material3.css';

选择变更事件示例:

import { ListBoxChangeEventArgs } from '@syncfusion/ej2-dropdowns';

selectedValues: string[] = [];

onSelectionChange(args: ListBoxChangeEventArgs): void {
  this.selectedValues = args.value as string[];
  console.log('Selected values:', args.value);
  console.log('Selected items:', args.items);
}
<ejs-listbox
  [dataSource]="items"
  (change)="onSelectionChange($event)">
</ejs-listbox>

双列表转移示例:

sourceItems = [
  { text: 'Available Item 1', id: '1' },
  { text: 'Available Item 2', id: '2' }
];

selectedItems = [];
<div style="display: flex; gap: 20px;">
  <div>
    <h4>Available Items</h4>
    <ejs-listbox
      [dataSource]="sourceItems"
      allowDragAndDrop="true"
      scope="transfer-list">
    </ejs-listbox>
  </div>
  
  <div>
    <h4>Selected Items</h4>
    <ejs-listbox
      [dataSource]="selectedItems"
      allowDragAndDrop="true"
      scope="transfer-list">
    </ejs-listbox>
  </div>
</div>

过滤示例:

allItems = [
  { text: 'Apple', category: 'Fruit' },
  { text: 'Carrot', category: 'Vegetable' },
  { text: 'Banana', category: 'Fruit' }
];

get filteredItems() {
  return this.allItems.filter(item => 
    item.text.toLowerCase().includes(this.searchTerm.toLowerCase())
  );
}

关键属性:

  • selectionSettings:{ mode: 'Single' | 'Multiple', showCheckbox: boolean, showSelectAll: boolean, checkboxPosition: 'Left' | 'Right' }。注意:使用 showCheckbox: true 时必须注入 CheckBoxSelection:
import { ListBoxComponent, CheckBoxSelection, ListBoxModule } from '@syncfusion/ej2-angular-dropdowns';
ListBoxComponent.Inject(CheckBoxSelection);
@Component({ imports: [ListBoxModule] })
  • maximumSelectionLength:限制最多可选项目数。
  • value:获取或设置选中值(string[] | number[] | boolean[])。
  • dataSource:数组或带项目的 DataManager。
  • fields:{ text, value, groupBy, iconCss, disabled, htmlAttributes }。
  • itemTemplate:渲染每个列表项的模板。
  • noRecordsTemplate:无匹配项时显示的模板。
  • allowDragAndDrop:启用拖放重排/转移。
  • scope:标识用于拖放转移的相关 ListBox。
  • allowFiltering:显示内置过滤搜索栏。
  • filterBarPlaceholder:过滤栏占位文本。
  • filterType:'StartsWith' | 'EndsWith' | 'Contains'。
  • toolbarSettings:为双 ListBox 转移配置工具栏按钮。
  • height:ListBox 高度。
  • sortOrder:'None' | 'Ascending' | 'Descending'。
  • enabled:启用/禁用组件。
  • enableRtl:从右到左渲染。
  • cssClass:附加 CSS 类。

适用场景

  • 选择表单:作为多选下拉的替代。
  • 转移列表:在双 ListBox 之间移动项目。
  • 分类:基于分组的项目组织。
  • 过滤:筛选大数据集。
  • 数据展示:展示结构化列表数据。
  • 无障碍:构建符合无障碍要求的选择界面。

限制

资料未提供关于收费、价格、平台兼容性、性能上限或具体版本要求的信息,暂未提供。