#angular #typescript #ng2-smart-table
#angular #typescript #ng2-smart-table
Вопрос:
Я использую ng2-smart-table из https://akveo.github.io/ng2-smart-table/#/documentation
Живая демонстрация:
http://akveo.com/ngx-admin/pages/tables/smart-table
Пожалуйста, помогите мне со следующими вопросами:
-
Я хочу выбрать несколько строк и вызвать одну функцию, так где мне нужно написать этот код в ng2-smart-table?
-
Могу ли я выбрать несколько строк и вызвать одну функцию для выбранных строк?
Я написал приведенный ниже код в файлах .ts и .html:
smart-table-component.ts:
actions: {
add: false,
edit: true,
delete: false,
custom: [{ name: 'ourCustomAction'}],
position: 'left',
columnTitle: 'Actions'
},
mode: 'external',
smart-table-component.html:
<nb-card-body>
<ng2-smart-table [settings]="settings" allowFiltering='true' allowPaging='true' [source]="windchillData"
(deleteConfirm)="onDeleteConfirm($event)" (custom)="onCustomAction($event)" (edit)="onEdit($event)">
</ng2-smart-table>
</nb-card-body>
Ответ №1:
1- Я хочу выбрать несколько строк и вызвать одну функцию, так где мне нужно написать этот код в ng2-smart-table?
Ответ:
Для выбора нескольких строк в ng2-smart-table
вам необходимо добавить конфигурацию в свой settings
объект.
Пример:
settings = {
// This `selectMode` is the configuration for selecting multiple rows in the table using checkbox
selectMode: 'multi',
delete: {
confirmDelete: true,
deleteButtonContent: 'Delete data',
saveButtonContent: 'save',
cancelButtonContent: 'cancel'
},
add: {
confirmCreate: true,
},
edit: {
confirmSave: true,
},
columns: {
// columns configuration
},
};
2- Могу ли я выбрать несколько строк и вызвать одну функцию для выбранных строк?
ng2-smart-table
нужно получить событие userSelectedRows
, мы можем использовать это событие для получения всех выбранных строк, а затем вызвать функцию, чтобы что-то сделать со всеми выбранными строками.
Пример:
- Шаг 1: Добавьте обработчик событий в шаблон
<ng2-smart-table [settings]="settings" allowFiltering='true' allowPaging='true' [source]="windchillData" (deleteConfirm)="onDeleteConfirm($event)" (custom)="onCustomAction($event)" (edit)="onEdit($event)" (userRowSelect)="onUserRowSelect($event)"></ng2-smart-table>
- Шаг 2: Создайте обработчик событий в
component.ts
, чтобы получить выбранные строки
onUserRowSelect(event) {
this.selectedRows = event.selected;
}
- Шаг 3: Кнопка создания и вызов функции, чтобы что-то сделать с выбранными строками
Кнопка в html
<button (click)="onClick()"> Get Selected </button>
Щелкните обработчик в component.ts
onClick() {
// It will console all the selected rows
console.log(this.selectedRows);
}
Здесь вы можете увидеть это в работе:https://stackblitz.com/edit/example-ng2-smart-table-18qsws
Комментарии:
1. когда вы добавляете режим множественного выбора, вы теряете возможность вызывать строку щелчком по самой строке, она вызывается только щелчком по флажку
2. @AbhijeetKhangarot это проблема, с которой я сталкиваюсь прямо сейчас!
Ответ №2:
Я не слишком знаком с этой библиотекой, но следующее должно помочь:
HTML
<button (click)="logAllSelectedRows()">log All selected</button>
<ng2-smart-table [settings]="settings" [source]="source" (deleteConfirm)="onDeleteConfirm($event)" (rowSelect)="rowSelectedHandler($event)">
ts
selectedRows = [];
rowSelectedHandler(rowData:{isSelected:boolean, data:any}){
if(rowData.isSelected === false){
/*remove row*/
this.selectedRows = this.selectedRows.filter((rowItem)=>rowItem .id !== rowData.data.id)
}else {
/*add row*/
this.selectedRows = [...this.selectedRows, ...rowData.data];
console.log('added rowdata');
}
}
logAllSelectedRows(){
console.log(this.selectedRows);
}
Ответ №3:
В ваших настройках ng2-smart-table ( [settings]="settings"
) добавьте эту строку, чтобы разрешить выбор более одной строки:
selectMode: 'multi',
Затем в вашем шаблоне добавьте событие (userRowSelect) в вашу ng2-smart-table:
<ng2-smart-table [settings]="settings" allowFiltering='true' allowPaging='true' [source]="windchillData" (deleteConfirm)="onDeleteConfirm($event)" (custom)="onCustomAction($event)" (edit)="onEdit($event)" (userRowSelect)="onUserRowSelect($event)"></ng2-smart-table>
В вашем компоненте обновляйте список выбранных строк при каждом (userRowSelect):
private selectedRows: any;
// ...
onUserRowSelect(event) {
this.selectedRows = event.selected;
}
Все еще в компоненте добавьте функцию, которая делает то, что вы хотите, с выбранными строками:
public doSomething() {
// Do something with `this.selectedRows`
}
Добавьте кнопку и вызывайте свою функцию при нажатии на нее!
<button (click)="doSomething()"> Run code on selected rows! </button>