选择列表设置选定项目角度2 ngModel

时间:2017-02-14 11:31:12

标签: angular angular2-forms angular2-ngmodel

这是我目前的代码:

<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]那样加载,而只是通过后端数据加载)。

问题是所选属性不起作用,而我的选择没有找到正确的角色。我做错了什么?

3 个答案:

答案 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;\
}