【发布时间】:2020-02-27 13:32:09
【问题描述】:
当表单处于编辑模式时,我似乎找不到合适的示例来说明如何使用 API 中的值填充复选框。
我有一个从 API 获取角色数据的服务。每个角色都可以有多个权限,如编辑用户、创建用户、创建产品、编辑产品等。我想要一个用户可以使用复选框编辑这些角色权限的表单。我尝试使用如下所示的 patchValue,但到目前为止它没有任何响应。
rolePermissionList = [];
permissionList = [];
setupForm() {
this.roleForm = this.fb.group({
role_name: ["", Validators.required],
description: [""],
status: [""],
permissions: this.fb.array([]),
}, {updateOn: 'change'});
}
ngOnInit() {
this.setupForm();
this.route.paramMap.subscribe(params => {
this.id = parseInt(params.get("id"));
// fetch single role record
this.getPageData(this.id);
})
}
// get page data
async getPageData(role_id) {
this.spinner.show();
// get role
await this.getRole(role_id);
// get all permissions
await this.getPermissions();
// get role permissions
await this.getRolePermissions(role_id);
this.spinner.hide();
}
我有两个服务:一个返回整个权限列表,另一个返回分配给当前角色的权限。我想要一种方法来仅检查分配给正在编辑的当前角色的权限。这些是获取所有权限和角色权限的函数:
// get permissions list
getPermissions() {
this.permissionService.getPermissionsList()
.subscribe(
data => {
console.log("permissions === ", data);
this.permissionList = data;
},
error => console.log(error));
}
// get role permissions
getRolePermissions(role_id?:any) {
// if role_id is supplied
let params = new HttpParams();
if (role_id) {
params=params.set('role_id', role_id.toString());
}
this.rolePermissionService.getRolePermissionsList(params)
.subscribe(
data => {
// store fetched data
this.rolePermissionList = data;
// extract permission name from returned array
var arrayOfPerms = data.map(function(obj) {
return obj.name;
});
// patch data
this.roleForm.pastchValue('permissions', arrayOfPerms);
},
error => {
console.log(error);
});
}
前端:
...
<div class="row" *ngIf="permissionList; else loading">
<div *ngFor="let permission of permissionList; let i=index" class="col-md-6">
<div class="custom-control custom-checkbox mr-sm-2 m-b-15">
<input type="checkbox"
[value]="permission.id"
(change)="onCheckChange($event)"
class="custom-control-input"
id="checkbox-{{ i }}">
<label class="custom-control-label" for="checkbox-{{ i }}">{{ permission.display_name }}</label>
</div>
</div>
</div>
...
任何帮助将不胜感激?
【问题讨论】:
-
您介意创建一个示例 StackBlitz 来使用吗?您可以通过
HttpClient从assets文件夹中的json文件中获取数据。只需在对HttpClient的get方法的调用中提供/assets/data.json的url。请分享示例 stackblitz 的链接。或者你可以分叉我刚刚为这个answer创建的这个stackblitz
标签: angular forms typescript api checkbox