Как добавить выбор всех функций в ng-select в Angular 5

Я нашел пример, который может сделать «выбрать все»: https://ng-select.github.io/ng-select#/multiselect-checkbox

Но я получаю сообщение об ошибке: Cannot read property 'selected' of undefined. Мне интересно, почему я получил эту ошибку и как реализовать «выбрать все» с помощью ng-select в Angular 5.

Спасибо


person Mingyue Chen    schedule 25.07.2018    source источник
comment
А как насчет selectedPeople.map(el => el.selected = true)?   -  person Cristian Traìna    schedule 25.07.2018
comment
Не могли бы Вы уточнить?   -  person Mingyue Chen    schedule 25.07.2018


Ответы (3)


Использование ng-select в Angular 5 ограничивает вас использованием v1.6.3 из ng-select (или ‹ v2.x), но вы можете сделать это с помощью шаблона заголовка ng-select. Я включил приведенный ниже код, но это рабочий Stackblitz Я собрал для примера:

<ng-select [items]="listOfItems"
            bindValue="id"
            bindLabel="name"
            [multiple]="true"
            placeholder="Select City"
            formControlName="example">

  <ng-template ng-header-tmp>

    <div>
      <button class="btn btn-link"
              (click)="onSelectAll()">Select All</button>
      <button class="btn btn-link"
              (click)="onClearAll()">Clear All</button>
    </div>

  </ng-template>

</ng-select>

Затем в вашем контроллере вы должны исправить элемент управления формы с массивом сопоставленных значений, чтобы включить только связанные значения, которые вы указали для ng-select, которые являются значениями ключа bindValue.

public onSelectAll() {
  const selected = this.listOfItems.map(item => item.id);
  this.form.get('example').patchValue(selected);
}

public onClearAll() {
  this.form.get('example').patchValue([]);
}
person mtpultz    schedule 05.02.2019
comment
Это сработало очень хорошо, единственная проблема заключается в том, что после нажатия «Выбрать все» значения исправляются, но раскрывающийся список остается там только до тех пор, пока мы не щелкнем за пределами раскрывающегося списка. Подскажите пожалуйста как побороть. - person Ayjaz Sayed; 15.09.2020
comment
Вы можете сделать что-то вроде этого: В HTML: укажите идентификатор для ng select, используя # ‹ng-select #serviceTypeDropdown name=service-type id=service-type bindLabel=name placeholder=Select state formControlName=state [multiple]=true› In TS: объявить дочерний элемент @ViewChild('serviceTypeDropdown') private serviceTypeDropdown: NgSelectComponent; и во всех методах выбора после исправления значения вы можете просто вызвать эту функцию: this.serviceTypeDropdown.close(); - person Manish Patidar; 08.07.2021

Если вы не используете реагирующие формы и хотите использовать свойство select all, то #getModelValue="ngModel" внутри тега ngselect в html-файле и в файле *.ts добавьте следующий код:

onSelectAll(select: NgModel, values, array) { 
  const selected = this.dropdownList.datas.map(item => item.id);
  select.update.emit(selected); 
}

deselectAll(select: NgModel) {
     select.update.emit([]); 
}
person Margi212    schedule 26.06.2019

Используя ng-select множественный выбор с группировкой, вы можете легко добавить выбор всех функций. Вот полный пример -

Демонстрация: https://angular-mkv8vp.stackblitz.io

Код: https://stackblitz.com/edit/angular-mkv8vp?file=src/multi-checkbox-group-example.component.html

Шаг 1- вызовите метод для выбора всей группы с помощью - this.selectAllForDropdownItems(this.people);

Шаг 2 - добавьте selectedAllGroup к каждому элементу этого массива для группировки.

selectAllForDropdownItems(items: any[]) {
    let allSelect = items => {
      items.forEach(element => {
        element['selectedAllGroup'] = 'selectedAllGroup';
      });
    };

    allSelect(items);
  };
  1. затем привязать к html
  • groupBy="selectedAllGroup" [selectableGroup]="true"
person Zahid Ahmed    schedule 12.06.2021