使用 Angular 中的管道过滤某些数据时出现问题

Problem using a Pipe in Angular to filter some data

我有一个下拉框,我在其中添加了一个搜索框,我想根据文本框条目过滤选项。在我的例子中,我还说如果 searchText 为 null 或空 return 所有数据都可以正常工作。但是如果我提交一个过滤器,我会得到这个错误。

core.js:6142 ERROR TypeError: Cannot read properties of undefined (reading 'toLowerCase') at option-filter.pipe.ts:13:47 at Array.filter () at OptionFilterPipe.transform (option-filter.pipe.ts:13:16)

这是我的模板代码

 <igx-drop-down-item *ngFor="let option of options |  optionFilter : optionsearch.value : 'name'" [value]="option">
    {{ option.name }}
    </igx-drop-down-item>

这是我的管道代码

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'optionFilter' })
export class OptionFilterPipe implements PipeTransform {
 
  public transform(data: any[], searchText: any, fieldName: string): any {
  if (searchText == null || data == null || searchText == '' ) {
    return data;
  }
  console.log(data)
  console.log('Serch Text : ' + searchText)
  console.log('FieldName : ' + fieldName)
   return data.filter(item => item[fieldName].toLowerCase().indexOf(searchText.toLowerCase()) !== -1);
  }
}
import { Pipe, PipeTransform } from '@angular/core';
// import { ServerDropdownOption } from 'somewhere';


type DynamicKey = keyof typeof ServerDropdownOption;

@Pipe({ name: 'optionFilter' })
export class OptionFilterPipe implements PipeTransform {
 
  public transform( data: ServerDropdownOption[], searchText: string, fieldName: string ): ServerDropdownOption[] {
  if (searchText == null || data == null || searchText == '' ) {
    return data;
  }
  const fieldRef = fieldName as DynamicKey;
  return data.filter(item => item[fieldRef].toLowerCase().indexOf(searchText.toLowerCase()) !== -1);
  }
}

应该可以,没测试过

PS: 从适当的地方导入 ServerDropdownOption

我想在我的情况下,它与调用时间有关并且没有数据,因为它是异步调用。 Fieldname 不是问题,我无法消除,因为它需要告诉函数在对象中过滤哪个字段。

下面是解决问题的代码

return data.filter(item => item[fieldName]?.toString()?.toLowerCase().indexOf(searchText?.toString()?.toLowerCase()) !== -1);