Почему функция Angular Material compareWith сравнивает только первое значение? - PullRequest
0 голосов
/ 21 марта 2019

Объект из API:

roles = {
    admin: false,
    user: true,
}

Шаблон:

<mat-select formControlName="roles" required multiple [compareWith]="compareRoles">
    <mat-option *ngFor="let role of roleList" [value]="role">{{role}}</mat-option>
</mat-select>

Компонент:

this.roles = ['admin', 'user']

createForm(): FormGroup
{
    return this._formBuilder.group({
        roles : [[this.roles]],
    })
}

сравнить с функцией:

public compareRoles(c1: any, c2: any): boolean {
    return true
}

Ожидаемое поведение с функцией CompareWith, всегда возвращающей true: Должны быть проверены как 'admin', так и 'user'.

Фактическое поведение: Проверяется только «admin». Функция не выполняет проверку для пользователя.

Почему сравнивается только первое значение в моем массиве ролей? Кроме того, почему не проверяются и «admin», и «user», когда функция CompareWith всегда возвращает true? *

1 Ответ

0 голосов
/ 21 марта 2019

Я предполагаю, что вы хотите динамически добавлять новые записи в раскрывающийся список, что потребует директивы сравнения с.Пожалуйста, смотрите эту ссылку для простого примера - https://netbasal.com/understanding-the-comparefn-input-in-angular-v4-4a401ef4fc4c

С учетом сказанного, я думаю, что ваш метод сравнения должен быть следующим -

roles = {
 {id:admin, value:false},
 {id:user, value:true}
}

public compareRoles(c1: any, c2: any): boolean {
  return c1.value == c2.value;
}
...