# `bricks.ChartBar` 技术文档 > 基于 ECharts 的柱状图组件,用于快速生成基于数据配置的柱状图表。 --- ## 概述 `bricks.ChartBar` 是 `bricks` 框架中的一个图表扩展类,继承自 `bricks.EchartsExt`。它封装了使用 [Apache ECharts](https://echarts.apache.org/) 绘制**柱状图(Bar Chart)**所需的基本逻辑,支持通过配置项动态加载数据并渲染图表。 该组件适用于需要展示分类维度下多个指标对比的场景,例如销量统计、用户增长等。 --- ## 类定义 ```javascript bricks.ChartBar = class extends bricks.EchartsExt ``` - **命名空间**: `bricks.ChartBar` - **父类**: `bricks.EchartsExt` - **注册名称**: `'ChartBar'`(通过 `bricks.Factory.register` 注册) --- ## 配置参数 `ChartBar` 支持以下初始化配置项: | 参数 | 类型 | 说明 | |------|------|------| | `data_url` | `String` (可选) | 数据请求的 URL 地址。若提供,则通过 AJAX 获取数据。 | | `data_params` | `Object` (可选) | 发送请求时携带的参数(与 `data_url` 配合使用)。 | | `method` | `String` (可选) | 请求方法,默认为 `'GET'`,可设为 `'POST'` 等。 | | `data` | `Array` (可选) | 直接传入的数据数组,格式为对象列表。优先级高于 `data_url`。 | | `nameField` | `String` | 指定作为 X 轴分类字段的键名(如:地区、时间等)。 | | `valueFields` | `Array` | 指定作为系列(Series)值字段的键名数组(即多个指标列)。 | ### 示例数据结构 ```json [ { "category": "A", "sales": 120, "profit": 80 }, { "category": "B", "sales": 150, "profit": 90 } ] ``` 对应配置: ```js { data: [...], nameField: "category", valueFields: ["sales", "profit"] } ``` --- ## 方法说明 ### `values_from_data(data, name)` 从数据集中提取指定字段的所有值。 #### 参数 - `data`: `Array` - 数据源数组。 - `name`: `String` - 要提取的字段名。 #### 返回值 - `Array` - 包含所有 `data[i][name]` 值的数组。 #### 示例 ```js this.values_from_data([ { year: '2020', sales: 100 }, { year: '2021', sales: 130 } ], 'sales'); // → [100, 130] ``` --- ### `lineinfo_from_data(data, name)` 构建单个 ECharts Series 配置对象(类型为 bar)。 #### 参数 - `data`: `Array` - 数据源。 - `name`: `String` - 字段名,用作 series 名称和数据提取依据。 #### 返回值 ```js { name: String, type: 'bar', data: Array // 提取自 data 中该字段的值 } ``` #### 示例 ```js this.lineinfo_from_data(data, 'sales'); // → { name: 'sales', type: 'bar', data: [100, 130] } ``` --- ### `setup_options(data)` 根据输入数据生成完整的 ECharts 配置选项(`option` 对象)。 #### 参数 - `data`: `Array` - 处理后的数据集。 #### 返回值 (`Object`) 返回标准的 ECharts 配置对象,包含: ```js { tooltip: { trigger: 'axis' }, legend: { data: [...] }, // 分类名称列表 xAxis: { type: 'category', data: [...] // nameField 对应的值列表 }, yAxis: { type: 'value' }, series: [ ... ] // 每个 valueField 对应一个 bar series } ``` #### 内部逻辑 1. 提取 `nameField` 的值作为 X 轴和图例数据; 2. 遍历 `valueFields`,为每个字段创建一个柱状图系列; 3. 整合成最终的 `options` 对象供 ECharts 渲染使用。 --- ## 使用示例 ```js var chart = new bricks.ChartBar({ data_url: '/api/sales-data', nameField: 'month', valueFields: ['income', 'expense'] }); chart.renderTo('#chart-container'); ``` 或直接传入数据: ```js var chart = new bricks.ChartBar({ data: [ { month: 'Jan', income: 5000, expense: 3000 }, { month: 'Feb', income: 6000, expense: 3500 } ], nameField: 'month', valueFields: ['income', 'expense'] }); chart.renderTo(document.getElementById('main')); ``` --- ## 图表渲染效果 - **X 轴**:显示 `nameField` 的值(类别轴)。 - **Y 轴**:数值轴,自动适配最大最小值。 - **Tooltip**:开启轴触发提示,鼠标悬停显示各系列数值。 - **Legend**:图例显示所有 `valueFields` 名称。 - **Series**:每个 `valueField` 显示为一组柱子(支持多组并列柱状图)。 --- ## 注册机制 ```js bricks.Factory.register('ChartBar', bricks.ChartBar); ``` 允许通过工厂模式创建实例: ```js bricks.Factory.create('ChartBar', config); ``` --- ## 注意事项 1. 必须确保页面已引入 ECharts 库且 `bricks.EchartsExt` 已正确定义。 2. `nameField` 和 `valueFields` 必须存在于数据对象中。 3. 若同时设置了 `data` 和 `data_url`,将优先使用 `data`。 4. 支持异步数据加载,`data_url` 返回的数据应为 JSON 数组。 --- ## 版本信息 - **作者**: bricks framework team - **版本**: 1.0.0 - **依赖**: `ECharts`, `bricks.EchartsExt` --- 📌 *文档生成时间:2025-04-05*