如何动态绑定ngmodel?
How to bind ngmodel dynamically?
我有一个使用 primeng 复选框的组件:
<div *ngFor="let user of users">
<p-checkbox
[name]="'0' + user.id"
[value]="'User:' + user.id"
[ngModel]="getUserModel()"
(ngModelChange)="change($event)">
</p-checkbox>
<p-checkbox
[name]="'0' + user.id"
[value]="'Admin:' + user.id"
[ngModel]="getUserModel()"
(ngModelChange)="change($event)">
</p-checkbox>
</div>
getUserModel() {
var model = [];
this.users.forEach(u => {
if(u.category === 'Admin')
model.push('Admin:' + u.id);
else
model.push('User:' + u.id);
};
return model;
}
当我这样做时,分页符似乎会永远循环调用 getUserModel()
方法。如何动态分配模型?
我不知道您的网站为什么会崩溃,但是 Angular 经常访问 ngModel 中的值,因此通常绑定函数不是一个好主意。相反,最好建立一次值,然后将 ngModel 绑定到一个变量。 Angular 跟踪该变量的更改,因此如果您更改它,Angular 也会更改。
在您的情况下,您可以在保存 getUserModel() 结果的用户模型中添加一个附加字段,然后像这样访问它:
<div *ngFor="let user of users">
<p-checkbox
[name]="'0' + user.id"
[value]="'User:' + user.id"
[ngModel]="user.resOfGetUserModel"
(ngModelChange)="change($event)">
</p-checkbox>
// ... code omitted
</div>
在您的 ts 中,您对用户执行 for 循环,在其中为用户的每个条目执行 getUserModel() 并将其保存到 "resOfGetUserModel"。
如果 users 是 getUserModel 的结果,那么显然你可以直接输入,如下所示:[ngModel]="users"
我有一个使用 primeng 复选框的组件:
<div *ngFor="let user of users">
<p-checkbox
[name]="'0' + user.id"
[value]="'User:' + user.id"
[ngModel]="getUserModel()"
(ngModelChange)="change($event)">
</p-checkbox>
<p-checkbox
[name]="'0' + user.id"
[value]="'Admin:' + user.id"
[ngModel]="getUserModel()"
(ngModelChange)="change($event)">
</p-checkbox>
</div>
getUserModel() {
var model = [];
this.users.forEach(u => {
if(u.category === 'Admin')
model.push('Admin:' + u.id);
else
model.push('User:' + u.id);
};
return model;
}
当我这样做时,分页符似乎会永远循环调用 getUserModel()
方法。如何动态分配模型?
我不知道您的网站为什么会崩溃,但是 Angular 经常访问 ngModel 中的值,因此通常绑定函数不是一个好主意。相反,最好建立一次值,然后将 ngModel 绑定到一个变量。 Angular 跟踪该变量的更改,因此如果您更改它,Angular 也会更改。
在您的情况下,您可以在保存 getUserModel() 结果的用户模型中添加一个附加字段,然后像这样访问它:
<div *ngFor="let user of users">
<p-checkbox
[name]="'0' + user.id"
[value]="'User:' + user.id"
[ngModel]="user.resOfGetUserModel"
(ngModelChange)="change($event)">
</p-checkbox>
// ... code omitted
</div>
在您的 ts 中,您对用户执行 for 循环,在其中为用户的每个条目执行 getUserModel() 并将其保存到 "resOfGetUserModel"。
如果 users 是 getUserModel 的结果,那么显然你可以直接输入,如下所示:[ngModel]="users"