Sir*_*ini 2 typescript angular2-ngmodel angular
我有这样一个数组:
objectArray = [
{"name": "Car"},
{"name": "Bike"},
{"name": "Boat"},
{"name": "Plane"}
];
Run Code Online (Sandbox Code Playgroud)
这样的模板:
<li *ngFor="#obj of objectArray">
<a href="#" class="small" data-value="option1" tabIndex="-1">
<input type="checkbox" (change)="expression && expression.value = $event.target.checked ? true : undefind" [ngModel]="expression?.value">
<label for="">{{ obj.name }}</label>
</a>
</li>
Run Code Online (Sandbox Code Playgroud)
但是,如果选中1复选框,则设置为true.我该如何单独设置?
小智 8
我在使用最新版本的Angular 2来解决此问题时遇到了一些麻烦。这就是我想对对象列表进行双向绑定的方法,该对象列表包含角色名称和检查角色时的布尔值。
<form [formGroup]="userInfoForm" (ngSubmit)="onSubmit(userInfoForm)">
Run Code Online (Sandbox Code Playgroud)
...
<input type="hidden" name="roles" formControlName="roles" [(ngModel)]="roleSelections">
<div *ngFor="let role of roleSelections">
<input type="checkbox"
[value]="role.isChecked"
[checked]="role.isChecked"
(change)="$event.target.checked ? role.isChecked = true : role.isChecked = false">
{{role.name}}
</div>
Run Code Online (Sandbox Code Playgroud)
RoleSelection只是一个简单的类,具有两个字段:
export class RoleSelection {
constructor(
public name: string,
public isChecked: boolean)
{ }
}
Run Code Online (Sandbox Code Playgroud)
并且在组件中,我必须在创建FormGroup时声明一个名为role的属性,然后将其绑定到上面HTML中的隐藏字段。
this.userInfoForm = new FormGroup({
emailAddress: new FormControl(this.userInfo.emailAddress, Validators.required),
firstName: new FormControl(this.userInfo.firstName, Validators.required),
middleName: new FormControl(this.userInfo.middleName),
lastName: new FormControl(this.userInfo.lastName, Validators.required),
isAdmin: new FormControl(this.userInfo.isAdmin),
isArchived: new FormControl(this.userInfo.isArchived),
roles: new FormControl(this.roleSelections)
});
Run Code Online (Sandbox Code Playgroud)
然后,在提交表单后,ngSubmit方法只需要提取所需的内容:
private onSubmit(obj: any) {
if (obj.valid) {
let account: IUserAccount = {};
account.id = this.userAccountId;
account.firstName = obj.controls.firstName.value;
...
...
// get list of roles checked via obj.controls.roles.value[i].isChecked etc
...
...
// do submission
}
}
Run Code Online (Sandbox Code Playgroud)
我想这就是你想要的:
<li *ngFor="let obj of objectArray">
<a href="#" class="small" data-value="option1" tabIndex="-1">
<input type="checkbox"
(change)="expression && expression[obj.name]=$event.target.checked ? true : undefined"
[ngModel]="expression && expression[obj.name]">
</a>
</li>
Run Code Online (Sandbox Code Playgroud)
更新
使用(ngModelChange)通常比好(change),特别是如果[ngModel]使用
<input type="checkbox"
(ngModelChange)="expression && expression[obj.name]= $event ? true : undefined"
[ngModel]="expression && expression[obj.name]">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21739 次 |
| 最近记录: |