#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;