从 dxi-column [calculateCellValue] 函数调用的函数访问组件范围

问题描述 投票:0回答:3

最后一个问题是,我无法从使用 [calculateCellValue]="function" 调用的函数访问 component.ts 的上下文,如果我使用 .bind(this) 传递它,DataGrids 交互功能将不起作用不再了。

最后一个问题:如何防止 .bind(this) 以避免 DataGrid 的功能变得不起作用,或者确保我不需要执行 [calculateCellValue]="function.bind(this)" 来传递上下文组件传递给函数,并以其他方式使用正常的 [calculateCellValue]="function" 方法传递上下文。

代码如下所示:

我正在将 DxDataGrid 与 DxiColumns 一起使用,它调用组件函数:

<dxi-column dataField="exampleField" [calculateCellValue]="getExamplevalues"></dxi-column>

Angular 组件中存在的 getExamplevalues 函数如下所示:

getExampleValues(dataGridContext: any) {
    return this.exampleItems.length;
}

exampleItems 在组件中的 ngOnInit 函数中启动:

  public example$: Subscription;
  public exampleItems: any;

  constructor(private exampleService: ExampleService) { }

  ngOnInit(): void {
    this.example$ = this.exampleService.getAll().subscribe(items => this.exampleItems = items);
  }

但是,在 getExamplevalues 函数中, this.exampleItems 始终未定义,因为该函数仅返回 DxDataGrid 的上下文,而不返回 Angular component.ts 上下文。

解决方案是改变:

<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues"></dxi-column>

=>

<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues.bind(this)"></dxi-column>

通过这种方式,您也可以访问组件上下文,但是,DataGrid 的交互部分现在不再工作,例如分组的折叠和展开功能。所以现在我被困住了。我该如何解决这个问题?

angular devexpress devextreme devextreme-angular dx-data-grid
3个回答
6
投票

您无法使用“get”访问器传递参数。您可以改用实例箭头。

getExampleValues = (dataGridContext: any) => {
    return this.exampleItems.length;
}

0
投票

你可以这样写你的 getExampleValue 函数

getExampleValues(dataGridContext: any) {
   return () => this.exampleItems.length;
}

并这样使用它

<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues()"></dxi-column>

据我所知,箭头函数继承了声明它的范围,因此您不必使用

.bind(this)

示例如下: https://stackblitz.com/edit/angular-tgtpvs


0
投票

2024 年这里的任何新接触 DX 和回调的人都必须将函数绑定到构造函数中的

this

this.getExampleValues = this.getExampleValues.bind(this);

getExampleValues(rowData: YourGridDatasourceRowDto) {
    return this.exampleItems.length;
}

模板

<dxi-column [calculateCellValue]="getExampleValues"></dxi-column>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.