Angular 2 Grid dataBound 事件的 Kendo UI

Posted

技术标签:

【中文标题】Angular 2 Grid dataBound 事件的 Kendo UI【英文标题】:Kendo UI for Angular 2 Grid dataBound event 【发布时间】:2017-08-14 22:46:39 【问题描述】:

有没有一种方法可以捕获网格的 dataBound 事件,类似于我们在 jQuery 版本的 Kendo UI 中使用的方法。数据加载到网格后,我需要执行一个操作。

有一个 dataStateChange 事件,但在初始加载期间不会触发此事件。

目前,我正在使用超时功能来延迟执行,但这不是永久可靠的解决方案。

谢谢。

【问题讨论】:

【参考方案1】:

我认为为此使用 Angulars 内置工具就足够了。

首先建议为网格创建一个新组件:

grid.component.html

<kendo-grid [data]="tableData" #myTable>
  <kendo-grid-column field="ListItem" title="List Item">
      <ng-template kendoGridCellTemplate let-dataItem>
         dataItem.title 
      </ng-template>  
  </kendo-grid-column>
</kendo-grid>

Angular 的 ngAfterViewInit 生命周期钩子将在初始化后触发:

grid.component.ts

import  AfterViewInit, Component, ElementRef, Input, ViewChild  from '@angular/core';

@Component(
  selector: 'app-table',
  templateUrl: `./table.component.html`,
)
export class TableComponent implements AfterViewInit  
  @ViewChild('myTable') myTable: ElementRef;

  public ngAfterViewInit() 
    console.log('loaded', this.myTable);
  

  public tableData = [
     title: 'Number 1', id: 'one',
     title: 'Number 2', id: 'two',
  ];

Here is a Stackblitz

如果数组的内容发生变化,我们会选择AfterContentChecked,它在每次类成员发生变化并调用detectChanges 之后运行,也就是说,当内容在生命周期中重新渲染时组件。

【讨论】:

很好的建议。谢谢。不过,我希望有更多面向组件的方法。由组件本身触发的事件。我刚刚检查了他们的最新版本,还没有 dataBound 事件。也许使用 Angular 的 ngAfterViewInit 可能是最好的选择。 遗憾的是,kendo 似乎选择了更多面向模板的组件方法,这可能是因为 kendo 本质上只是一个 jquery 插件。对于完整的基于组件的支持,您将不得不考虑有角材料。我遇到了同样的问题:我选择剑道来实施我们公司内的一个项目,但由于此类问题,我们正在从剑道转向角度材料。 此解决方案有效。模组,请标记为解决方案。 在 ngOnChanges 中处理数据变化可能是最好的,因为输入可能会改变并且 ngAfterViewInit 只被调用一次! 当输入改变时,改变检测将再次运行。不需要使用ngOnChanges,除非有特殊的事情要处理onPush

以上是关于Angular 2 Grid dataBound 事件的 Kendo UI的主要内容,如果未能解决你的问题,请参考以下文章

发布剑道网格值

如何根据 Kendo-Angular2-grid 中的数据自动调整网格列的大小?

使用 ag-grid 和 angular 2 时发送多个请求

如何在 ag-grid 中为 Angular 2 进行分页

Angular Material 2:如何设置 md-grid-tile 的样式?

使用 Angular 2 最新版本的 ag-grid 中的货币格式