用途
Syncfusion JavaScript QueryBuilder 是一个用于构建动态、复杂查询的可视化 UI 组件。该技能提供在 TypeScript 应用中实现、配置和自定义 QueryBuilder 的全面指导,让用户无需编写代码即可构建复杂的过滤条件。
主要能力
- 支持多种数据类型:字符串、数字、日期、布尔。
- 支持多种运算符:等于、包含、介于等。
- 支持使用 AND/OR 条件对规则进行分组,以及嵌套分组层级。
- 支持自定义模板以定制 UI。
- 支持拖拽交互:重排、克隆、锁定规则。
- 支持 JSON 导入/导出与 SQL 生成。
- 支持 RTL 和完整键盘无障碍访问,符合 WCAG 2.1 AA 标准。
使用方式
文档按主题组织,包含以下参考文件:
- 入门:安装与 npm 包设置、Syncfusion 依赖配置、CSS 导入与主题设置、基本初始化、列定义、运行第一个应用。
- 列与架构定义:列定义与架构结构、从数据自动生成列、字段映射与标签、支持的数据类型、各类型运算符、数字/日期的 step 与 format 属性、自定义列配置模式。
- 数据绑定:使用 JavaScript 数组的本地数据绑定、使用 DataManager 的远程数据绑定、DataSource 赋值模式、预定义查询的 RuleModel 结构、绑定初始规则、动态数据更新与刷新、DataManager 配置。
- 规则与分组管理:RuleModel 结构(condition、rules、field、operator、value)、创建单条过滤规则、使用 AND/OR 逻辑分组、以编程方式添加和删除规则、添加和删除分组、规则验证与约束、嵌套分组层级。
- 过滤与搜索操作:创建和删除过滤条件、查询执行方法、自定义过滤条件模式、条件内搜索、ShowButtons 配置(规则删除、分组插入/删除)、基于 UI 和编程方式的过滤、过滤变更事件处理。
- 模板与自定义:值模板、运算符模板、字段模板自定义、自定义 HTML 模板创建、模板渲染与绑定、CSS 类自定义、动态模板渲染模式。
- 拖拽与规则交互:规则拖放、组内克隆规则、锁定规则防止修改、分隔符与连接符行为、在组间移动规则、拖放事件处理、视觉反馈与样式。
- 导入/导出与持久化:将规则导出为 JSON、从 JSON 导入规则、SQL 查询生成、JSON 序列化模式、格式转换(规则转 SQL/JSON)、数据持久化策略、状态管理。
- 无障碍与 RTL:WCAG 2.1 AA 合规标准、键盘导航模式、ARIA 属性与标签、屏幕阅读器支持、RTL 语言支持、焦点管理与指示器、本地化与国际化。
- 高级特性与故障排查:全局与本地配置选项、模型绑定模式、高级验证策略、性能优化技巧、事件处理与回调、状态持久化模式、常见问题与故障排查、复杂场景最佳实践。
- API 参考:完整属性参考(含类型与默认值)、所有公共方法(含参数与返回类型)、所有事件(含事件参数接口)、关键模型接口(RuleModel、ColumnsModel、ShowButtonsModel、ValueModel、TemplateColumn、Validation)、事件参数接口(ActionEventArgs、ChangeEventArgs、RuleChangeEventArgs、DragEventArgs、DropEventArgs)、SQL/查询输出接口(ParameterizedSql、ParameterizedNamedSql)、初始化、SQL 导出、规则管理、克隆/锁定、拖放的使用示例。
快速上手示例
import { QueryBuilder, ColumnsModel, RuleModel } from '@syncfusion/ej2-querybuilder';
// 定义数据
const employeeData = [
{
EmployeeID: 1,
FirstName: 'Nancy',
Title: 'Sales Representative',
HireDate: '22/07/2001',
City: 'Seattle',
Country: 'USA'
},
{
EmployeeID: 2,
FirstName: 'Andrew',
Title: 'Vice President',
HireDate: '21/04/2003',
City: 'Tacoma',
Country: 'USA'
}
];
// 定义与数据匹配的列
const columnData: ColumnsModel[] = [
{ field: 'EmployeeID', label: 'Employee ID', type: 'number' },
{ field: 'FirstName', label: 'First Name', type: 'string' },
{ field: 'Title', label: 'Title', type: 'string' },
{ field: 'HireDate', label: 'Hire Date', type: 'date', format: 'dd/MM/yyyy' },
{ field: 'City', label: 'City', type: 'string' },
{ field: 'Country', label: 'Country', type: 'string' }
];
// 可选:定义初始规则
const initialRules: RuleModel = {
condition: 'and',
rules: [
{
label: 'Employee ID',
field: 'EmployeeID',
type: 'number',
operator: 'equal',
value: 1
},
{
label: 'Title',
field: 'Title',
type: 'string',
operator: 'startswith',
value: 'Sales'
}
]
};
// 创建 QueryBuilder 实例
const queryBuilder = new QueryBuilder({
width: '100%',
dataSource: employeeData,
columns: columnData,
rule: initialRules
});
// 渲染到 DOM
queryBuilder.appendTo('#querybuilder');
常见模式
模式 1:单规则基本过滤
const rule: RuleModel = {
condition: 'and',
rules: [{
field: 'FirstName',
type: 'string',
operator: 'startswith',
value: 'A'
}]
};
模式 2:使用分组的 AND/OR 逻辑
const rule: RuleModel = {
condition: 'and',
rules: [
{ field: 'City', operator: 'equal', value: 'Seattle' },
{
condition: 'or',
rules: [
{ field: 'Title', operator: 'contains', value: 'Sales' },
{ field: 'Title', operator: 'contains', value: 'Manager' }
]
}
]
};
模式 3:动态添加规则
const newRule = [{
field: 'Country',
operator: 'equal',
value: 'USA'
}];
queryBuilder.addRules(newRule, 'group0');
模式 4:导出为 JSON 以便存储
const rules = queryBuilder.getRules();
const jsonQuery = JSON.stringify(rules);
// 存储到数据库或本地存储
关键概念
- RuleModel:表示单个过滤条件,包含 field、operator 和 value。
- Condition:用于组合多条规则的逻辑运算符(AND/OR)。
- GroupModel:带有 AND/OR 条件的规则容器。
- Operators:比较方法(equal、contains、between 等)。
- Data Types:支持的列类型(string、number、date、boolean)。
- Templates:用于字段、运算符和值的自定义 UI 元素。
- State:规则和分组的当前配置。
适用场景
- 高级搜索过滤:让用户为数据搜索构建复杂查询。
- 报表生成:为报表参数创建动态过滤器。
- 数据导出:在导出前通过可视化 UI 过滤数据。
- 日志分析:构建复杂查询以分析系统日志。
- 客户细分:基于多个条件筛选客户。
- 权限规则:定义具有复杂条件的访问规则。
- 通知规则:创建动态告警条件。
- ETL 工作流:在转换前过滤源数据。
限制
资料中未提供关于收费、价格、平台限制或具体性能指标的信息,暂未提供。