You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中展示HashMap内查询与执行计划:实现执行计划表格化

解决Angular中执行计划表格样式显示的问题

我来帮你搞定这个执行计划显示的难题!你现在遇到的是执行计划文本无法保留控制台那样的格式化样式、只显示单行的问题,下面给你几个实用的解决方案:

方案1:使用预格式化标签保留原始样式

这是最简单快速的方法,利用HTML的<pre>标签来保留执行计划的换行、缩进和空格,再配合CSS优化显示效果:

模板代码

<table class="query-plan-table">
  <thead>
    <tr>
      <th>查询语句</th>
      <th>执行计划</th>
    </tr>
  </thead>
  <tbody>
    <!-- 遍历你的HashMap,用keyvalue管道处理键值对 -->
    <tr *ngFor="let entry of queryPlanMap | keyvalue">
      <td class="query-column">{{ entry.key }}</td>
      <td class="plan-column">
        <!-- 用pre标签包裹执行计划文本,保留原始格式 -->
        <pre class="execution-plan">{{ entry.value }}</pre>
      </td>
    </tr>
  </tbody>
</table>

CSS样式

.query-plan-table {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0;
}

.query-plan-table th,
.query-plan-table td {
  border: 1px solid #e0e0e0;
  padding: 8px 12px;
  text-align: left;
}

.execution-plan {
  /* 使用控制台常用的等宽字体,还原原生显示效果 */
  font-family: 'Courier New', Courier, monospace;
  background-color: #f8f9fa;
  padding: 10px;
  border-radius: 4px;
  /* 允许过长的行自动换行,避免横向滚动 */
  white-space: pre-wrap;
  word-wrap: break-word;
  /* 限制高度,超出部分滚动,避免表格过高 */
  max-height: 350px;
  overflow-y: auto;
}

这个方案能完美还原控制台的显示效果,不需要复杂的解析逻辑,适合大多数场景。

方案2:解析执行计划为HTML表格(进阶版)

如果想把执行计划转换成真正的HTML表格(比如执行计划本身就是结构化的表格文本),可以写一个Angular管道来解析文本,生成表格结构:

1. 创建解析管道

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'parsePlanToTable'
})
export class ParsePlanToTablePipe implements PipeTransform {
  transform(planText: string): string[][] {
    if (!planText) return [];

    // 拆分执行计划的每一行,过滤空行
    const lines = planText.split('\n').filter(line => line.trim().length > 0);
    
    // 按多个空格拆分每行的字段(根据你的执行计划格式调整分隔符)
    // 不同数据库的执行计划格式不同,比如MySQL用多空格分隔,PostgreSQL可能有特殊格式
    return lines.map(line => {
      // 匹配连续2个及以上空格作为分隔符
      return line.split(/\s{2,}/).map(segment => segment.trim());
    });
  }
}

2. 在模板中使用管道

<td class="plan-column">
  <table class="structured-plan-table">
    <tr *ngFor="let row of entry.value | parsePlanToTable">
      <td *ngFor="let cell of row">{{ cell }}</td>
    </tr>
  </table>
</td>

3. 对应的CSS

.structured-plan-table {
  width: 100%;
  border-collapse: collapse;
  font-family: 'Courier New', Courier, monospace;
}

.structured-plan-table td {
  border: 1px solid #ddd;
  padding: 4px 8px;
}

注意:这个方案需要根据你使用的数据库(MySQL/PostgreSQL/Oracle等)的执行计划格式,调整管道中的拆分逻辑,确保能正确分割每个字段。

小提示

如果你的执行计划是JSON格式(比如某些数据库支持返回JSON结构的执行计划),可以直接使用Angular的json管道配合样式来展示,或者使用专门的JSON可视化组件,会更方便!

内容的提问来源于stack exchange,提问作者apoorva96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:17:11