从 dxi-column [calculateCellValue] 函数调用的函数访问组件范围
Access component scope from a function called by the dxi-column [calculateCellValue] function
最后一个问题是我无法从使用 [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-function 中 this.exampleItems 始终未定义,因为该函数仅 returns DxDataGrid 的上下文而不是 Angular component.ts 上下文。
一个解决方案是改变:
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues"></dxi-column>
=>
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues.bind(this)"></dxi-column>
通过这种方式,您也可以访问组件上下文,但是,DataGrid 的交互部分现在不再起作用,例如分组的折叠和展开功能。所以现在我被困住了。我该如何解决?
您可以这样编写 getExampleValue 函数
getExampleValues(dataGridContext: any) {
return () => this.exampleItems.length;
}
并这样使用
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues()"></dxi-column>
据我所知,箭头函数继承了声明它的作用域,所以你不必使用 .bind(this)
您不能使用 'get' 访问器传递参数。您可以改用实例箭头。
getExampleValues = (dataGridContext: any) => {
return this.exampleItems.length;
}
最后一个问题是我无法从使用 [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-function 中 this.exampleItems 始终未定义,因为该函数仅 returns DxDataGrid 的上下文而不是 Angular component.ts 上下文。
一个解决方案是改变:
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues"></dxi-column>
=>
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues.bind(this)"></dxi-column>
通过这种方式,您也可以访问组件上下文,但是,DataGrid 的交互部分现在不再起作用,例如分组的折叠和展开功能。所以现在我被困住了。我该如何解决?
您可以这样编写 getExampleValue 函数
getExampleValues(dataGridContext: any) {
return () => this.exampleItems.length;
}
并这样使用
<dxi-column dataField="exampleField" [calculateCellValue]="getExampleValues()"></dxi-column>
据我所知,箭头函数继承了声明它的作用域,所以你不必使用 .bind(this)
您不能使用 'get' 访问器传递参数。您可以改用实例箭头。
getExampleValues = (dataGridContext: any) => {
return this.exampleItems.length;
}