如何为已知行数创建具有无限列的 Angular Material Design 表?

2024-05-01

我创建了一个 HTML 表,它将生成无限的columns基于 数量rows在输入数据中。我尝试过使用这个帖子 https://stackoverflow.com/questions/49868019/angular-material-table-dynamic-columns-without-model举个例子,但我正在努力将 HTML 转换为 Angular Material 设计。有什么建议么?

StackBlitz 演示 https://stackblitz.com/edit/angular-iga2fk

由于 Angular 材质表是基于列的(并且我找不到迭代其中行的方法),所以我很快就陷入了困境。

我无法在 StackBlitz 中获得有角度的材料表,所以这里是我的代码的复制粘贴:

<table mat-table [dataSource]="newLicenseDS">

    <ng-container *ngFor="let disCol of newLicCol; let idx = index" matColumnDef="{{disCol}}">
        <th mat-header-cell *matHeaderCellDef>{{disCol}}</th>
        <ng-container *ngIf="idx==0">
           <td mat-cell *matCellDef="let e">{{e[0]|json}}</td>
        </ng-container>
        <ng-container *ngIf="idx==1">
           <td mat-cell *matCellDef="let e">{{e[1]|json}}</td>
        </ng-container>
        <ng-container *ngIf="idx==2">
           <td mat-cell *matCellDef="let e[2]">{{e|json}}</td>
        </ng-container>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="newLicCol"></tr>
    <tr mat-row *matRowDef="let row; columns: newLicCol"></tr>
</table>

您唯一需要的是“循环”matColumnDef。 -看到我们使用[matColumnDef] and {{element[col]}}

如果你的桌子是这样的

<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

  <ng-container *ngFor="let col of displayedColumns" [matColumnDef]="col">
    <th mat-header-cell *matHeaderCellDef>{{col}}</th>
    <td mat-cell *matCellDef="let element"> {{element[col]}} </td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>

您只需要转换数据并指示显示的列。 你可以在 ngOnInit() 中执行

ngOnInit() {
    const head = this.data.map(x => x.name)
    const data: any[] = [];
    this.data.forEach((x, index) => {
      Object.keys(x).forEach((k, index2) => {
        data[index2] = data[index2] || {}
        data[index2][head[index]] = x[k]

      })
    })
    this.displayedColumns=head;
    this.dataSource = data.slice(1); //I remove the first element that was the "header"
  } 

See in 堆栈闪电战 https://stackblitz.com/edit/angular-8nmwlq?file=app%2Ftable-basic-example.ts

Update关于这个问题,不要使用 mat-table,而是使用简单的表,只是我们需要使用 displayedColumns 进行迭代。有些喜欢

<table>
  <tr>
    <th *ngFor="let col of displayedColumns">{{col}}</th>
  </tr>
  <tr *ngFor="let row of dataSource">
     <td *ngFor="let col of displayedColumns">{{row[col]}}</td>
  </tr>
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为已知行数创建具有无限列的 Angular Material Design 表? 的相关文章

随机推荐

  • ‘+= new EventHandler’和‘-= new EventHandler(anEvent)’之间的区别

    我看到一些代码使用 新的事件处理程序 anEvent 你能告诉我有什么不同吗 新的事件处理程序 Thanks 一个将委托添加到订阅者集合中 另一个将其删除 例如 如果您之前订阅了某个事件 但您希望在关闭表单时删除引用 则可以使用 版本 您将
  • 如何导出从 HTML DOM 解析器检索到的所有图像?

    我想要 使用从我的网站获取所有图像PHP 简单 HTML DOM 解析器 http simplehtmldom sourceforge net 并将它们全部导出到我的桌面ALL立刻 Not右键单击保存或屏幕截图 OPTIONAL 保存所有h
  • 如何在不实际调整大小的情况下触发 Control.Resize 事件?

    我不会对控件进行子类化 尝试通过触发事件Control Size Control Size失败 因为即使新大小实际上不同 它也不会触发 如果您要子类化Control 你可以打电话OnResize直接 或者将其暴露在 API 上 public
  • 如果您要使用的库尚不支持 Carthage 该怎么办

    我正在评估 Carthage 是否适合我的项目 我想找到答案的问题之一是当我想要使用的库 框架不支持 Carthage 时该怎么办然而 你们中有人曾经遇到过这个问题并找到了解决方案吗 Thanks 迦太基需要的主要东西是一个框架 并且该框架
  • 发送 WCF 消息在负载下延迟

    当从自托管 WCF 服务向许多客户端 大约 10 个左右 发送消息时 有时消息的延迟时间比我预期的要长得多 发送到本地网络上的客户端需要几秒钟 有谁知道为什么会这样以及如何解决它 一些背景 该应用程序是股票行情式服务 它从第三方服务器接收消
  • 使用BindingSource很慢?

    我有一个 C Windows 窗体项目 其中的窗体包含 2 个列表框和一个按钮 在 FormLoad 上 左侧列表框填充了一个列表 约 1800 个项目 其中包含有关证券的信息 ID 和名称 当用户单击按钮时 所有证券都会从左侧列表框移至右
  • Pandas ImportError:绘图需要 matplotlib

    Pandas 无法识别已安装的 matplotlib 库 这是代码 import pandas as pd import numpy as np import matplotlib pyplot as plt matplotlib inli
  • 是否可以使用 numpy 中可用的函数将二维数组修补为子数组数组?

    是否可以使用 np reshape 和 np split 函数将二维数组修补为子数组数组 import numpy as np data np arange 24 reshape 4 6 print data 0 1 2 3 4 5 6 7
  • R 中矩阵的逆

    我想知道你推荐的计算矩阵逆的方法是什么 我找到的方法似乎并不令人满意 例如 gt c rbind c 1 1 4 c 1 4 1 gt c 1 2 1 1 00 0 25 2 0 25 1 00 gt inv c Error could n
  • 条件与 eval {php} [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 然后我得到
  • Android:创建自定义形状进度条的最佳方法

    我想创建一个自定义形状的进度条 它会根据其进度改变颜色 但这几乎是一个不同的问题 那么 创建如下图所示的自定义形状进度条的最佳方法是什么 抱歉 MS Paint 绘图技巧不佳 为了拥有所有可能性 您应该创建一个从进度条派生的自定义类并完全重
  • MinGW支持MFC吗?

    我已经使用 MinGW 开发了 WinAPI 应用程序 没有出现任何问题 现在 我可以用 MFC 做同样的事情吗 我只是在这里猜测 但我认为您需要购买 Visual Studio 的副本才能获得使用 MFC 的许可证 MFC 也不因其对 C
  • 无限循环消耗 100% CPU

    我陷入了需要生成某个 Hz 的定义频率的情况 我尝试过多媒体计时器和互联网上提供的所有其他东西 但到目前为止 带有一些 if else 条件的无限循环给了我最好的结果 但这种方法的问题是它消耗了几乎所有的CPU 没有空间让其他应用程序正常工
  • 将 GDCM 图像转换为 Java BufferedImage

    我正在使用 GDCM 读取 DICOM 图像 有没有一种简单的方法可以使用 GDCM 读取 dicom 文件 然后将其转换为 Java BufferedImage 到目前为止我有以下内容 String filename C test dcm
  • 在本地运行 IPython Notebook 查看器

    我试图在我的工作中引入 IPython 笔记本 我想要做到这一点的方法之一是与同事分享我自己的笔记本工作 这样他们就能够看到创建复杂的报告并共享它们是多么容易 我显然无法使用笔记本查看器 因为我们的大部分工作都是保密的 我正在尝试在本地设置
  • DateField 未呈现为 type="date"

    class Form Form plan start DateField Plan Start validators Required 这段代码将渲染这个 html
  • ALL 的 SQL 参数

    我想知道SQL中是否有一个参数适用于所有 不是 例如 我现在正在编写一个搜索表 如果用户不在文本框中输入某些内容 则意味着忽略该特定参数并显示该字段的所有内容 我知道您可以为每种情况创建单独的 OLEDB 或 SQL 命令 并且它会起作用
  • 如何找出 gem 捆绑包将 gem 锁定在特定版本的原因?

    我正在尝试指定一个版本节俭宝石 http rubygems org gems thrift在我的宝石文件中 gem thrift gt 0 6 0 当我尝试跑步时bundle install 我收到此错误 You have requeste
  • UITextView分页启用文本截断

    我正在使用 UITextView 并启用分页 在 IB 中并以编程方式打开和关闭它 有很多文本 当启用分页滚动时 有时当前可查看文本的第一行和 或最后一行会在视图中的一半处结束 而在框架的底部或顶部则有一半在视图之外 因此您只能看到顶部或顶
  • 如何为已知行数创建具有无限列的 Angular Material Design 表?

    我创建了一个 HTML 表 它将生成无限的columns基于 数量rows在输入数据中 我尝试过使用这个帖子 https stackoverflow com questions 49868019 angular material table