如果你正在使用 Angular 16 或更高版本,你可以在该场景下利用 Signals。
private freespins = toSignal(this.freespins$);
displayFn(id: string): string {
return this.freespins()!.find((freespin) => freespins.name === id)?.name || '';
}
你也可以这样返回一个函数:
displayFn(): (id: string) => string {
return (id: string) =>
this.freespins()!.find((freespin) => freespins.name === id)?.name ||
'';
}
如果 this.freespins$
是 BehaviorSubject
,你可以直接获取其值而无需订阅:
private freeSpins$ = new BehaviorSubject(this.options);
displayFn2(user: User): string {
return (
this.freeSpins$
.getValue()!
.find((freespin) => freespins.name === user.name)?.name || ''
);
}
还有另一种解决方案,通过返回一个函数并结合使用 async
管道:
在 TypeScript 文件中:
displayFn3(spins: User[] | null): (user: User) => string {
return (user: User) =>
spins?.find((freespin) => freespins.name === user.name)?.name || '';
}
在 HTML 文件中:
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn3(freeSpins$ | async)">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option">{{option.name}}</mat-option>
</mat-autocomplete>
查看此示例以获取更多灵感:
StackBlitz 示例