[英]angular2 ngModel/ngValue select option object - equality across different instances
[英]Select option using ngmodel in angular2
用户名
export class User {
....
roles: Role[]
}
<select name="roles" class="form-control role_select" [(ngModel)]="user.roles">
<option value="null" >Select role</option>
<option *ngFor="let role of roles" [value]="role.id">
{{role.title}}
</option>
</select>
它工作正常,但未选择角色。 用户数据像这样来
Roles: Array[1]
username: "vsdfsdfsdfds"
更新代码,问题是当我设置user.roles时,它给出的Property 'Roles' does not exist on type 'User'
setUser(user: User): void {
this.user = user;
this.user.roles = user.Roles;
}
public ngOnInit(): void {
this.userSubscription = this.userService.getuserdetail(this.route.params['_value']['id']).subscribe(user => {
this.setUser(user);
});
就像是
ngOnInit() {
this.user.roles = this.Roles[0];
}
因此,请改用接口:
export interface User {
username: string;
roles: Role[];
}
并且您可以完全跳过setUser
方法,可以在订阅中为user
分配值:
.subscribe(user => {
this.user = {username: user.username, roles: user.Roles}
});
当您第一次分配用户内容并在此之后分配roles
时,您最终会得到错误的用户内容。 当我尝试了,我结束了既与对象Roles
和roles
的对象数组。
然后,您的模板将需要进行一些更改,因为数据将异步传输,因此我们也将选择内容包装在*ngIf
中。
<div *ngIf="user">
<select [(ngModel)]="user.roles">
<option value="null" >Select role</option>
<option *ngFor="let role of user.roles">
{{role.title}}
</option>
</select>
</div>
注意,角色的迭代是*ngFor="let role of user.roles"
希望这可以帮助!
该函数的参数不能属于User类,因为它具有Roles属性。 在用户类中,您只有角色属性。 字母的大小在JS和TS中很重要。
setUser(user: any): void {
this.user = user.username; //
this.user.roles = user.Roles;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.