Как использовать [(ngModel)] в множественном выборе для выбора параметров, хранящихся в базе данных?

#angular #angular-material #mat-select

Вопрос:

[(ngModel)]="parameters.account.roles" содержит выбранные параметры, полученные из базы данных, но при открытии диалогового окна ни один параметр не выбран.

Все остальные поля показывают правильные данные и parameters.account.roles не являются пустыми.

HTML

 lt;mat-form-field appearance="fill"gt;  lt;mat-labelgt;Rolelt;/mat-labelgt;  lt;mat-select multiple [(ngModel)]="parameters.account.roles"gt;  lt;mat-option *ngFor="let role of allRoles" [value]="role"gt;{{role.name}}lt;/mat-optiongt;  lt;/mat-selectgt; lt;/mat-form-fieldgt;  

тс

 constructor(  public dialogRef: MatDialogReflt;UserAccountFormComponentgt;,  @Inject(MAT_DIALOG_DATA) public parameters: {mode: ActionMode, account: UserAccount},  private roles:RolesService) {  this.account = parameters.account;  }   ngOnInit(): void {  this.roles.getAll().subscribe((response: any) =gt; {  this.allRoles = response._embedded.roleList as Role[];  });  }  

Комментарии:

1. какие данные вы получаете в параметрах.учетной записи.ролях и всех ролях?

2. параметры.учетная запись.роли-это список объектов, Роль которых была применена к пользователю. [{идентификатор: ‘ROLE202111001’, имя: ‘ROLE_ADMIN’}]. И все роли одинаковы, но список всех зарегистрированных ролей в таблице ролей. @джейраг парик

3. оба объекта массива используют одну и ту же роль модели?

4. Да, у учетной записи пользователя есть атрибут под названием роли: Роль [], и когда я выбираю все роли, я использую их как роль[]. this.allRoles = response._embedded.roleList как роль[]. this.allRoles имеет тип Роль[].

Ответ №1:

Попробуйте это:

В файле ts:

 compareFn(role1: Role, role2: Role) {  return role1 amp;amp; role2 ? role1.id === role2.id : role1 === role2; }  

и HTML-файл:

 lt;mat-form-field appearance="fill"gt;  lt;mat-labelgt;Rolelt;/mat-labelgt;  lt;mat-select multiple [compareWith]="compareFn" [(ngModel)]="parameters.account.roles"gt;  lt;mat-option *ngFor="let role of allRoles" [value]="role"gt;{{role.name}}lt;/mat-optiongt;  lt;/mat-selectgt; lt;/mat-form-fieldgt;