【问题标题】:Using ng-template as cellRenderer in ag-grid / Angular 5在 ag-grid / Angular 5 中使用 ng-template 作为 cellRenderer
【发布时间】:2018-08-03 22:11:10
【问题描述】:

似乎每当您想通过文本转换以外的方式自定义单元格的输出时,您都需要一个 cellRenderer。但它需要一个全新的组件来实现这一目标。一般来说,这种方法很好,但我发现在我的项目中我经常使用网格,我需要为它们自定义单元格渲染器。大多数情况下,它们也不能重复使用并且特定于特定网格。仅仅为了提供 HTML 模板结构而创建(并将其存储在文件系统中的某个位置)另一个组件的开销对我来说似乎有点矫枉过正。

有没有一种方法可以在 Ag-Grid 中渲染单元格,而无需指定完整的组件,继承自 AgGrid 渲染器?例如,我可以只使用带有#id 引用的 ng-template,我可以以某种方式将其传递给 Ag-Grid 吗?

【问题讨论】:

  • 是的,您可以在组件中使用 ng-template 并将其作为单元格渲染器传递给 ag-grid,在该组件中,您可以检查参数/变量并启用或禁用所需的 HTML使用 ngif 格式。这样你就可以只有一个组件来处理所有网格的单元格渲染?
  • 如果您有相关的内容要补充,请回答实际问题,而不是发明我没有要求的奇怪且低效的解决方案。
  • @rattkin,您最终找到了一种自定义单元格的简单方法吗?
  • 不幸的是,没有。我正在为 cellrenderers 使用外部类,这很麻烦。

标签: angular ag-grid ag-grid-ng2


【解决方案1】:

以下是在单元格渲染器自定义组件中使用 ng-template 的示例,您可以创建多个跨度,并且可以使用 ngif 显示和隐藏或根据属性控制要显示的元素。在下面的代码中,我只使用了一个跨度,您可以根据需要进行修改。同样在编写完这个单元格渲染器组件后,我将名称分配给coldefs中ag-grid的单元格渲染器。

import { Component } from "@angular/core";
import { ICellRendererAngularComp } from "ag-grid-angular";

@Component({
    selector: 'tooltip-cell',
    template: `<ng-template #popTemplate>
                    <div class="tooltip-renderer">
                         Created By: {{creator}} <br/>
                         Created On: {{crDateTime | date:'short'}} <br/>
                         Revised By: {{revisor}} <br/>
                         Revised On: {{revDateTime | date:'short'}} <br/>
                    </div>
                </ng-template>
                <span [tooltip]="popTemplate" placement="left" container="body" triggers="mouseenter mouseleave dblclick">{{params.value}}</span>` })

export class ToolTipRenderer implements ICellRendererAngularComp {
    public params: any;
    public creator: any;
    public crDateTime: any;
    public revisor: any;
    public revDateTime: any;

    agInit(params: any): void {
        this.params = params;
        this.creator = params.data["Creator"];
        this.crDateTime = params.data["CrDate"];
        this.revisor = params.data["Revisor"];
        this.revDateTime = params.data["RevDate"];
    }
    refresh(): boolean {
        return false;
    }
}
var colDef1 = {
    cellRenderer: "tooltipRenderer",
    ...
}

【讨论】:

  • 感谢您的善意,但您误解了这个问题。另外,该解决方案非常糟糕。在我的书中,大笨重的组件聚合所有代码和字符串编程的依赖关系是一个禁忌。
  • 字符串编程是什么意思?为了在 ag-grid 单元格中渲染引导工具提示,除了创建自定义组件之外别无他法,因为如果您编写 html 回调单元格渲染器,则不会在单元格中渲染工具提示。可能我只是浪费时间回答你的问题。我很抱歉。
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 2022-11-30
  • 2019-02-09
  • 2016-11-04
  • 2018-10-12
  • 1970-01-01
  • 2021-03-27
  • 2018-12-11
相关资源
最近更新 更多