Как выбрать несколько строк в компоненте ng2-smart-table с флажком?

#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

Пожалуйста, помогите мне со следующими вопросами:

  1. Я хочу выбрать несколько строк и вызвать одну функцию, так где мне нужно написать этот код в ng2-smart-table?

  2. Могу ли я выбрать несколько строк и вызвать одну функцию для выбранных строк?

Я написал приведенный ниже код в файлах .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>