将链接/模板列添加到自定义表格组件

2024-01-10

我有一个基于本文构建的表格组件:从头开始创建 Angular2 数据表 http://4dev.tech/2016/09/creating-an-angular2-datatable-from-scratch/.

我一直在扩展它,所以做我的应用程序所需的不同事情(例如排序和分页),但我不明白的一件事是如何提供某种“模板列”以允许创建诸如编辑/删除链接。

我试着弄清楚如何获得<ng-content>工作于ColumnComponent这样我就可以通过这种方式传递链接/路由器链接模板,但我不知道如何使用此表的构建方式来做到这一点。

这是我的组件的简化版本:

Plunkr https://plnkr.co/edit/5iBUR11CR6B653HpgaMW?p=preview

现在的(简化的)组件:

数据表.component.html

<table class="table table-striped table-hover">
    <thead>
        <tr>
            <th *ngFor="let column of columns">
              {{column.header}}
            </th>
        </tr>
    </thead>
    <tbody *ngFor="let row of dataset; let i = index">
        <tr>
            <td *ngFor="let column of columns">
              {{row[column.value]}}
            </td>
        </tr>
    </tbody>
</table>

数据表.组件.ts

import { Http, Response } from '@angular/http';
import { Injectable, Component, Input, Output, EventEmitter } from '@angular/core';
import { ColumnComponent } from './column.component';

@Component({
    selector: 'datatable',
    templateUrl: 'src/datatable.component.html'
})
export class DatatableComponent {

    @Input() dataset;
    columns: ColumnComponent[] = [];
    addColumn(column) {
        this.columns.push(column);
    }
}

列.组件.ts

import {Component, Input} from '@angular/core';
import {DatatableComponent} from './datatable.component';

@Component({
  selector: 'column',
  template: ``,

})
export class ColumnComponent {
    @Input() value: string;
    @Input() header: string;

    constructor(public table: DatatableComponent) {
        table.addColumn(this);
    }
}

现有组件的组件标记示例

<datatable  [dataset]="photoData">
    <column [value]="'id'" [header]="'ID'"></column>
    <column [value]="'title'" [header]="'Title'"></column>
</datatable>

所需的标记示例不一定要完全像这样,但我正在努力实现类似的目标:

<datatable  [dataset]="photoData">
    <column [value]="'id'" [header]="Edit">
         This is a custom edit link column:
         <a [routerLink]="['/edit/', id]">
            <span class='glyphicon glyphicon-pencil'></span>
         </a>
    </column>
    <column [value]="'id'" [header]="'ID'"></column>
    <column [value]="'title'" [header]="'Title'"></column>
</datatable>

我会利用ngTemplateOutlet来实现它。

为您的可能的模板创建参考

列.组件.ts

@ContentChild('tableHeaderTemplate') headerTemplate: TemplateRef<any>;
@ContentChild('tableBodyTemplate') bodyTemplate: TemplateRef<any>;

因此,如果我们提供了标题或正文,我们现在可以使用自定义模板

数据表.component.html

<table class="table table-striped table-hover">
    <thead>
      <tr>
        <th *ngFor="let col of columns">
           <ng-container *ngIf="!col.headerTemplate">{{col.header}}</ng-container> 
           <ng-template *ngIf="col.headerTemplate" [ngTemplateOutlet]="col.headerTemplate" [ngTemplateOutletContext]="{ $implicit: { header: col.header } }"></ng-template>
        </th>
      </tr>
    </thead>
    <tbody *ngFor="let row of dataset; let i = index">
      <tr>
        <td  *ngFor="let col of columns">
          <ng-container *ngIf="!col.bodyTemplate">{{row[col.value]}}</ng-container> 
          <ng-template *ngIf="col.bodyTemplate" [ngTemplateOutlet]="col.bodyTemplate" [ngTemplateOutletContext]="{ $implicit: { value: row[col.value] }, row: row }"></ng-template>
        </td>
      </tr>
    </tbody>
</table> 

最后表定义可能如下所示:

<datatable  [dataset]="photoData">
    <column [value]="'id'" [header]="'ID'"></column>
    <column [value]="'title'" [header]="'Title'">
        <ng-template #tableHeaderTemplate let-column>
            <span style="color: red">{{ column.header }}</span>
        </ng-template>
    </column>
    <column [value]="'title'" [header]="'Actions'">
      <ng-template #tableBodyTemplate let-column let-row="row">
          <button (click)="remove(row.id)">Remove {{row.id}}</button>
      </ng-template>
    </column>
</datatable>

笨蛋的例子 https://plnkr.co/edit/CLkwkBqBpSc7hyPTHszA?p=preview

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将链接/模板列添加到自定义表格组件 的相关文章

随机推荐

  • 如何从 JSON 回复中提取有意义的信息? [复制]

    这个问题在这里已经有答案了 回复 印度孟买 response version 0 1 termsofService http www wunderground com weather api d terms html features ge
  • ruby中通过ioctl获取essid

    为了避免依赖无线工具 我想使用 ioctl 直接从设备获取 essid 在 C 中这不会是问题 但在 Ruby 中则完全不同 问题在于以下结构无线 h用作 ioctl 的输入 回复 struct iw point void user poi
  • 在python中将字典转换为二进制

    我有一本字典 其中键作为我的客户 ID 值作为我的电影 ID 尽管客户已经多次观看同一部电影 但我希望将其制作为一部电影 这里我需要将我的字典转换为二进制数据 在所有行中 我需要客户 ID 和列作为电影 ID 如果客户看过电影 则给出 1
  • 如何删除默认的 Bootstrap 3 轮播控件背景渐变?

    我很确定这是我需要修改的代码 但由于某种原因我无法让渐变在 IE 中消失 我要他们彻底消失 carousel control text shadow none opacity 1 filter alpha opacity 100 carou
  • Pandas Groupby Agg 功能不减少

    我正在使用我在工作中已经使用了很长时间的聚合函数 这个想法是 如果传递给函数的系列的长度为 1 即该组只有一个观察值 则返回该观察值 如果传递的系列的长度大于 1 则观察结果将以列表形式返回 这对某些人来说可能看起来很奇怪 但这不是一个 X
  • (Tomcat) 部署时备份 WAR

    是否有任何内置机制可以在 Tomcat 中部署时备份 war 文件 例如 我部署了 whosit war 我想要当前部署的 whosit war 备份到 whosit backup war 或者 如果每个部署在 whosit deploy
  • 计算一个字符串在另一个字符串中出现的次数

    我有一个指向 CSS 文件的字符串 css style css 我想知道有多少 都在字符串之内 我如何用 JavaScript 得到这个 对于这个简单的情况 您不需要正则表达式 var haystack css style css var
  • 如何根据给定的文件夹名称创建多个目录

    我有一个文件列表 这些文件的名称由类组和 ID 组成 eg science 000000001 java 我能够获取所有文件的名称并将它们拆分 因此我将类组放入一个数组中 将 id 放入另一个数组中 我拥有它 以便数组不能有两个相同的值 这
  • 使用带有remote: true 的ajax 的Ruby 表单会给出ActionController::InvalidAuthenticityToken 错误。经典提交不

    我正在为 RoR 网站编写聊天页面 我已经用 HTML 解决了所有问题 并且正在尝试使用 ajax 来实现它 有一个用于提交消息的表格 表单标签读取 我的整个看法 br div align center br span span div
  • Oracle 替换功能

    我需要在选择查询时从表 2 的值中替换表 1 的字段值 Eg Table1 Org Permission Company1 1 3 7 Company2 1 3 8 Table2 Permission Permission 1 Read 3
  • Swiper spaceBetween 无法正常工作

    我正在尝试使用slidesPerView auto with spaceBetween 20财产 但是Swiper https idangero us swiper api 每个视图仅显示一张幻灯片 我想在第一张幻灯片之后显示下一张幻灯片
  • 使用 X,Y 坐标绘制圆内的点

    javascript中有没有一种方法可以绘制x y坐标 使它们落入圆形而不是方形 例如 如果我有以下代码 circleRadius 100 context drawImage img elem dx dy dw dh 我需要计算出落在 10
  • 不安全的指针迭代和位图 - 为什么 UInt64 更快?

    我一直在做一些不安全的位图操作 并发现减少指针的增加次数可以带来一些重大的性能改进 我不确定为什么会这样 即使您在循环中进行了更多的按位运算 但最好还是在指针上进行更少的迭代 例如 不要使用 UInt32 迭代 32 位像素 而是使用 UI
  • Web服务使用kso​​ap方法从应用程序接收空参数

    我见过讨论这个问题的主题 但似乎没有人发布解决方案 目前 我正在测试将参数传递给我的 Net Web 服务 当参数到达 Web 服务时 它会添加一个附加字符串 然后将其返回到我的应用程序 但我返回的只是字符串消息 而不是我传递的参数 我的网
  • 如何在 jasper (iReport) 报告上显示阿拉伯语、希伯来语等语言字体

    我有这个简单的表格报告 其中包含许多不同类型的列 但是当打印报告时rtf 字 扩大 带有数字或日期的列appears on the report 包含阿拉伯语内容的栏目appear on the report 但是当打印报告时PDF扩大 带
  • 如何更改 .NET MAUI 中 TabBar 的选项卡标题字体

    在我的 AppShell xaml 中 我有以下 TabBar 代码 我似乎找不到允许我更改标题字体 和字体大小等 的属性或任何内容
  • 如何签出旧提交并将其设为新提交

    我想 跟进 关于此事的另一个问题 签出旧提交并将其设为新提交 https stackoverflow com questions 3380805 checkout old commit and make it a new commit 但他
  • 如何删除用jquery创建的元素?

    我在 jquery 中编写了这段代码 以在一些事件发生后创建三个元素 body append tmp div div div div appendTo tmp div div appendTo tmp 这三个元素是正常创建的并添加到我的 D
  • Javascript - 表单选择元素在新窗口中打开 url 并提交表单

    UPDATED 请阅读原始问题下面的更多详细信息 我有一个带有各种 url 的选择表单元素 我想在选择时在新窗口中打开 为此 我在元素的 onchange 事件中添加了以下代码 window open this options this s
  • 将链接/模板列添加到自定义表格组件

    我有一个基于本文构建的表格组件 从头开始创建 Angular2 数据表 http 4dev tech 2016 09 creating an angular2 datatable from scratch 我一直在扩展它 所以做我的应用程序