この問題はまだ開いていますが、この回避策によればAngular 2 - Checkbox not kept in syncは期待どおりに動作するはずです。モデルが変更されても角度4のチェックボックスの状態は更新されません
ロールに付与されている権限のリストがあります。ユーザーがロールを更新したい場合は、編集可能なロール名を持つフォームとそのリストをチェックボックスリストとして表示します。今度は、ロールに既にリストからのアクセス許可がある場合、リスト項目のいくつかをチェックする必要があります。
マイ形式:
<tr *ngFor ="let perm of permissions, let i = index">
<td>
<label>
<input type="checkbox"
name="check-box-{{perm.permission_alias}}"
value="{{perm.permission_id}}"
(ngModel)="perm.checked"
(ngModelChange)="onSelectFilter($event,perm)"
attr.id="check-box-{{perm.permission_alias}}"
/>
{{perm.permission_alias}}
</label>
</td>
</tr>
マイコンポーネント:
getPermissions(role: Role): void {
this.permissions = [];
this.userService.getPermissions().then(perms => {
if (role != null) {
this.permissions = perms;
for (let rp of role.permissions) {
let index = this.permissions.indexOf(this.permissions.find(p => p.permission_id == rp.permission_id));
if (index >= 0) {
this.permissions[index].checked = true;
//this.onSelectFilter(true, this.permissions[index]); not sure if this should be called
}
}
console.log("before selected perms on update");
console.log(this.permissions);
}
else {
this.permissions = perms;
}
}).catch(this.handleError);
}
onSelectFilter(selected: boolean, filter: Permission) {
filter.checked = selected;
if (this.permissions.every(filter => !filter.checked)) {
setTimeout(() => {
this.permissions.forEach(filter => filter.checked = true);
});
}
}
私は、これが機能しない理由はわかりません、私はリストでチェック商品はありません。 助けていただければ幸いです。
からあなたplunkで同じことを更新しました。このコード 'this.permissions.forEach(filter => filter.checked = true);'は非常に奇妙に見えます。フィルタを使用しますが、割り当てを使用しているフィルタ条件として結果を無視します。 'setTimeout'も冗長に見えます。 –