6

我找到了一个可以“全选”的例子: https ://ng-select.github.io/ng-select#/multiselect-checkbox

但是,我得到一个错误:Cannot read property 'selected' of undefined. 我想知道为什么会出现这个错误,以及如何在 Angular 5 中使用 ng-select 实现“全选”。

谢谢

4

3 回答 3

20

在 Angular 5 中使用会ng-select限制您使用v1.6.3ng-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([]);
}
于 2019-02-05T22:48:42.270 回答
1

如果您不使用反应表单,并且想使用全选属性,则在 html 文件和 *.ts 文件的 ngselect 标记内的 #getModelValue="ngModel" 添加以下代码:

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

deselectAll(select: NgModel) {
     select.update.emit([]); 
}
于 2019-06-26T05:46:14.987 回答
1

使用带有分组依据的 ng-select 多选 - 您可以通过简单的方式添加“全选”功能。这是完整的示例 -

演示:https ://angular-mkv8vp.stackblitz.io

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

步骤 1- 调用 select all group by 的方法-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"
于 2021-06-12T04:28:00.767 回答