如何将 "select all" 功能添加到 Angular 中的 ng-select 5
How to add "select all" functionality to ng-select in Angular 5
我找到了一个可以做 "select all" 的考试:
https://ng-select.github.io/ng-select#/multiselect-checkbox
但是,我得到一个错误:Cannot read property 'selected' of undefined.
我想知道为什么我会得到这个错误,以及如何在 Angular 5 中使用 ng-select 实现 "select all" .
谢谢
在 Angular 5 中使用 ng-select
限制您使用 ng-select
的 v1.6.3(或 < v2.x) , 但您可以使用 ng-select
header 模板完成此操作。我包含了下面的代码,但这是一个有效的 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([]);
}
如果你不使用 React 表单,并且想使用 select 所有 属性,那么 #getModelValue="ngModel" inside ngselect tag in 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([]);
}
将 ng-select multi select 与 group by 结合使用 - 您可以轻松添加“select all”功能。这是完整的例子 -
演示:https://angular-mkv8vp.stackblitz.io
代码:https://stackblitz.com/edit/angular-mkv8vp?file=src/multi-checkbox-group-example.component.html
第 1 步 - 调用 select 所有分组的方法 - this.selectAllForDropdownItems(this.people);
第 2 步 - 将 selectedAllGroup 添加到该数组的每个项目中作为分组依据。
selectAllForDropdownItems(items: any[]) {
let allSelect = items => {
items.forEach(element => {
element['selectedAllGroup'] = 'selectedAllGroup';
});
};
allSelect(items);
};
- 然后绑定到html
groupBy="selectedAllGroup" [selectableGroup]="true"
我找到了一个可以做 "select all" 的考试: https://ng-select.github.io/ng-select#/multiselect-checkbox
但是,我得到一个错误:Cannot read property 'selected' of undefined.
我想知道为什么我会得到这个错误,以及如何在 Angular 5 中使用 ng-select 实现 "select all" .
谢谢
在 Angular 5 中使用 ng-select
限制您使用 ng-select
的 v1.6.3(或 < v2.x) , 但您可以使用 ng-select
header 模板完成此操作。我包含了下面的代码,但这是一个有效的 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([]);
}
如果你不使用 React 表单,并且想使用 select 所有 属性,那么 #getModelValue="ngModel" inside ngselect tag in 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([]);
}
将 ng-select multi select 与 group by 结合使用 - 您可以轻松添加“select all”功能。这是完整的例子 -
演示:https://angular-mkv8vp.stackblitz.io
代码:https://stackblitz.com/edit/angular-mkv8vp?file=src/multi-checkbox-group-example.component.html
第 1 步 - 调用 select 所有分组的方法 - this.selectAllForDropdownItems(this.people);
第 2 步 - 将 selectedAllGroup 添加到该数组的每个项目中作为分组依据。
selectAllForDropdownItems(items: any[]) {
let allSelect = items => {
items.forEach(element => {
element['selectedAllGroup'] = 'selectedAllGroup';
});
};
allSelect(items);
};
- 然后绑定到html
groupBy="selectedAllGroup" [selectableGroup]="true"