如何在DataTables Angular 5的下一个/上一个分页按钮上捕获单击事件

时间:2018-09-19 12:35:19

标签: javascript angular datatable pagination angular-datatables

如何在angular 5的上一个/下一个分页按钮中捕获单击事件,不幸的是我在jquery中获得了代码。

jquery代码:

var table = $('#example').DataTable({
 drawCallback: function(){
  $('.paginate_button.next', this.api().table().container())          
  .on('click', function(){
  alert('next');
 });       
 }
}); 

Ember forums

#stack overflow link

但是我需要角度数据表。如果有示例,如何捕获上一个/下一个单击事件。

按钮行点击事件

 buttonInRowClick(event: any): void {
    event.stopPropagation();
    console.log('Button in the row clicked.');
  }

整行点击事件

wholeRowClick(): void {
    console.log('Whole row clicked.');
  }

预期下一个/上一个按钮单击事件

nextButtonClickEvent():void {
   //do next particular records like  101 - 200 rows.
   //we are calling to api
}
previousButtonClickEvent():void {
  //do previous particular the records like  0 - 100 rows.
   //we are calling to API
}

因为我的后端有成千上万的记录。

4 个答案:

答案 0 :(得分:1)

我建议使用ngx-datatable库,它非常完整且易于使用!连文档都很好! https://github.com/swimlane/ngx-datatable

答案 1 :(得分:1)

解决方案是通过为on()调用中的第二个参数提供目标元素的选择器来使用事件委托,请参见下面的示例。根据jQuery on()文档

答案 2 :(得分:1)

您需要为Angular组件提供有关要绑定功能的元素的引用

<div #mytable></div>

在您的组件中,添加带有ViewChild的元素引用

@ViewChild('mytable') tableRef: ElementRef;

然后使用该元素引用来绑定所需的功能,并使其在angular中可用

ngAfterViewInit(): void {
  this.table = $(this.tableRef.nativeElement).DataTable({
      drawCallback: function () {
        $('.paginate_button.next', this.api().table().container()).on('click', () =>  {
          // your angular method here
          this.nextButtonClickEvent();
        });
      }
  });
}

只需测试您的范围。通过使用箭头功能,您可以访问在您的类中编写的方法,这应该可以解决问题

答案 3 :(得分:0)

您可以在组件内部使用任何jquery代码,并使用箭头功能维护对this的引用

组件

declare let $: any;
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {


  ngOnInit() {
    let table = $('#example').DataTable({
      drawCallback: () => {
        $('.paginate_button.next')
          .on('click', () => {
            this.nextButtonClickEvent();
          });
      }
    });
  }

  nextButtonClickEvent(): void {
       console.log('next clicked');
  }

}

stackblitz demo