Кажется, я не могу найти подходящий пример того, как заполнить флажок значениями из API, когда форма находится в режиме редактирования.
У меня есть служба, которая извлекает данные о ролях из API. Каждая роль может иметь несколько разрешений, таких как edit-user, create-user, create-product, edit-product и т. Д. Мне нужна форма, в которой пользователь может редактировать эти разрешения роли с помощью флажков. Я попытался использовать 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>
...
Любая помощь будет принята с благодарностью?