angular - 角度比较在非材料选择中不起作用
问题描述
我试图从基于材料的表单控件切换到“普通”控件,但我似乎无法获得compareWith
使用此版本的方法。
我查看了许多(非常简单的)示例,并尝试重新创建最简单的场景:
@Component({
selector: 'app-root',
template: `<form>
<select [formControl]="plainControl" [compareWith]="comp">
<option *ngFor="let option of options" value="option">{{option}}</option>
</select>
<mat-select [formControl]="matControl" [compareWith]="compMat">
<mat-option *ngFor="let option of options" value="option">{{option}}</mat-option>
</mat-select>
</form>`
})
export class AppComponent {
options = [1,2,3,4,5];
plainControl = new FormControl({id: 3, name: 'foo'});
matControl = new FormControl({id: 3, name: 'bar'});
comp(o1: any, o2: any): boolean {
console.log('Comparing Plain');
return o1 == o2;
}
compMat(o1: any, o2: any): boolean {
console.log('Comparing Material');
return o1 == o2;
}
}
正确触发比较功能,而mat-select
平原select
没有。这是角度的错误还是我错过了什么?
我很清楚这种特殊的比较是没有用的,我只想知道为什么普通版本不会触发。
我的 Angular 版本是 7.1.0
解决方案
改变它从
<select [formControl]="plainControl" [compareWith]="comp">
<option *ngFor="let option of options" value="option">{{option}}</option>
</select>
至
<select [formControl]="plainControl" [compareWith]="comp">
<option *ngFor="let option of options" [ngValue]="option">{{option}}</option>
</select>
此处示例:https ://angular.io/api/forms/SelectControlValueAccessor
推荐阅读
- c++ - 我可以使用现代 C++ (STL/Boost) 进行多路复用吗?
- javascript - 导航目录展开和折叠 Bootstrap 4
- c# - 接口 - 在这种情况下是否值得强制使用它们?
- javascript - 显示数据库数据(纬度,经度)并使用 laravel 将它们打印为谷歌地图上的标记
- javascript - 如何确定 WebRTC dataChannel.send 是否已交付?
- apache-spark-sql - Spark DataFrame 提示函数的可能值是什么?
- javascript - 为什么我的 javascript 函数不执行?错误:无法读取未定义的属性“更改”
- python - 如何使符号的用户输入不区分大小写
- regex - VBA 正则表达式单行标志
- ios - 使用 Apple ID 在多个设备上登录