这是我目前的代码:
<select name="role" [(ngModel)]="user.role">
<option *ngFor="let role of roles" [ngValue]="role" [attr.selected]="role == user.role ? 'true' : 'false'">{{role.name}}</option>
</select>
我正在加载数组中的所有角色,并且用户类具有Role属性(不像user.role = roles[0]
那样加载,而只是通过后端数据加载)。
问题是所选属性不起作用,而我的选择没有找到正确的角色。我做错了什么?
答案 0 :(得分:6)
只需删除
[attr.selected]="role == user.role ? 'true' : 'false'"
并将所选角色分配给user.role
,而ngModel
会使匹配项目成为所选角色。
如果role
是一个对象,则指定的实例必须完全相同。
另请参阅最近添加的自定义比较https://github.com/angular/angular/issues/13268 自4.0.0-beta.7起可用
<select [compareWith]="compareFn" ...
compareFn(val1, val2): boolean {
return val1 && val2 ? val1.id === val2.id : val1 === val2;
}
答案 1 :(得分:3)
您无需使用[attr.selected]
。 [(ngModel)]="user.role"
是双向数据绑定,如果值等于user.role
,它将从列表中选择匹配的选项。您还可以使用基本的[value]
<select name="role" [(ngModel)]="user.role">
<option *ngFor="let role of roles" [value]="role">{{role.name}}</option>
</select>
答案 2 :(得分:0)
<select [ngModel]="selectedDevice" (ngModelChange)="onChange($event)" name="sel2">
<option [value]="i" *ngFor="let i of devices">{{i}}</option>
</select>
onChange(newValue) {
console.log(newValue);
this.selectedDevice = newValue;\
}