是否可以在TypeScript中设置Angular SelectionModel object的CompareWith功能

是否可以在TypeScript中设置Angular SelectionModel object的CompareWith功能,angular,angular-material,mat-table,selectionmodel,Angular,Angular Material,Mat Table,Selectionmodel,我有一个组件,在它的模板中呈现mat表。我想预先选择一些行。我拥有的SelectionModel包含表示每个选定项的对象(不是简单的字符串或数字),比较这些对象的方法比本机SelectionModel的方法更复杂 如果这是一个mat select表单控件,我可以使用[compareWith]指令提供一个自定义比较函数,例如 <mat-select [compareWith]="myCompareFunction" >... 。。。 但这不是一个合适的解决方案

我有一个组件,在它的模板中呈现mat表。我想预先选择一些行。我拥有的SelectionModel包含表示每个选定项的对象(不是简单的字符串或数字),比较这些对象的方法比本机SelectionModel的方法更复杂

如果这是一个mat select表单控件,我可以使用[compareWith]指令提供一个自定义比较函数,例如

<mat-select [compareWith]="myCompareFunction"  >...
。。。
但这不是一个合适的解决方案,因为我需要一个表格。我将密切关注角度文档中的示例。mat table示例有一个mat table,每行上都有一个选择复选框,这就是我所采用的方法

在示例的组件代码中,它使用SelectionModel对象

import {SelectionModel} from '@angular/cdk/collections';
....
....
selection = new SelectionModel<PeriodicElement>(true, []);
从'@angular/cdk/collections'导入{SelectionModel};
....
....
selection=新SelectionModel(true,[]);
我正在寻找为SelectionModel对象提供自定义比较函数的方法。SelectionModel可以通过函数重写进行子分类,还是可以通过某种方式“注入”方法

我尝试将SelectionModel子类化并声明一个新的compareWith函数,但这似乎不是必需的。有人能提供建议吗

   import { SelectionModel } from '@angular/cdk/collections';
   import { InputOptionIf } from '../formosa-interfaces/dynamic-field-config-if';

   export class ModalSelectSelectionModel extends SelectionModel<InputOptionIf>{
      compareWith(o1:any,o2:any) {
        console.log("ModalSelectSelectionModel.compareWith()")
        return( <InputOptionIf>o1.label==<InputOptionIf>o2.label);
      }
   }  
从'@angular/cdk/collections'导入{SelectionModel};
从“../formosa interfaces/dynamic field config if”导入{InputOptionIf};
导出类ModalSelectionModel扩展了SelectionModel{
与(o1:any,o2:any)进行比较{
log(“modalselectionselectionmodel.compareWith()”)
返回值(o1.label==o2.label);
}
}  

因此,在检查了源代码之后,似乎不可能对SelectionModel进行子分类,以替换用于比较对象的方法。这是因为SelectionModel的大多数属性在TypeScript中声明为私有。我想这一切都可以被忽略和覆盖,因为它基本上是JS的,但是当我试图使用它们时,编译器会抱怨——我喜欢保持一个干净的编译

我所做的是创建一个新类,而不使用任何继承表单SelectionModel。这个类实现了我所需的SelectionModel子集(切换选择中的项目,并在发生更改时发出事件),我需要提供一个比较对象的函数,并使用这个函数而不是Collections/SelectionModel类。演员阵容有点混乱,但它可以防止编译器呻吟

this.selectionModel= <SelectionModel<InputOptionIf>><unknown>new MySelectionMode(...)
this.selectionModel=newmyselectionmode(…)

它现在可以工作了,这就是我所需要的。感谢您的提示。

选择模型不支持自定义比较。您可以在显示表格时手动切换这些行,因此默认情况下会选择这些行。感谢您的反馈和非常有用的链接。