【问题标题】:Angular - Datatable click row eventAngular - 数据表单击行事件
【发布时间】:2016-06-24 22:05:45
【问题描述】:

我正在使用 AngularJS 和 angular-datatable,我想连续处理事件,我已经设置了控制器来监听事件,但它不起作用。我的代码是:

html

<div  class="panel panel-flat">
    <div class="panel-heading">
        <h6 class="panel-title">Planilla</h6>
    </div>
    <div class="panel-heading"> 
    <table class="table datatable-basic table-hover" datatable="ng" dt-options="empleadoList.dtOptions"  dt-column-defs="empleadoList.dtColumnDefs" >
        <thead>
            <tr>
                <th style="width: 30px;">Nro.</th>  
                <th>Nombre Completo</th>
                <th class="col-md-2">DNI</th>
                <th class="col-md-2">Celular</th>
                <th class="col-md-2">Teléfono</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="empleado in empleadoList.empleados">
                <td style="width: 30px;">{{$index + 1}}</td>
                <td> <span class="text-muted"><i class="icon-user"></i>{{empleado.apellidoPaterno}} {{empleado.apellidoMaterno}} {{empleado.nombre}}</span></td>
                <td><span class="text-success-600"><span class="status-mark border-blue position-left"></span>{{empleado.dni}}</span></td>
                <td><span class="text-success-600"><i class="icon-mobile position-left"></i> {{empleado.celular}}</span></td>
                <td><h6 class="text-semibold"><i class="icon-phone position-left"></i> {{empleado.telefono}}</h6></td>
            </tr>
        </tbody>
    </table>
    </div>
</div>

controller.js

App.controller('EmpleadoListController', function($scope,$resource,EmpleadoService,DTOptionsBuilder,DTColumnDefBuilder) {

$scope.dtOptions = DTOptionsBuilder.newOptions()
    .withDisplayLength(10)
    .withOption('bLengthChange', false)
    .withPaginationType('full_numbers')
    .withOption('rowCallback', rowCallback);
$scope.dtColumnDefs = [
                   DTColumnDefBuilder.newColumnDef(0),
                   DTColumnDefBuilder.newColumnDef(1),
                   DTColumnDefBuilder.newColumnDef(2),
                   DTColumnDefBuilder.newColumnDef(3),
                   DTColumnDefBuilder.newColumnDef(4)
               ];

function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
    $('td', nRow).unbind('click');
    $('td', nRow).bind('click', function() {
        $scope.$apply(function() {
            console.log('click row');
        });
    });
    return nRow;
}

EmpleadoService.fetch().then(
        function(response){
            return $scope.empleadoList = { empleados: response.data};
        }, 
        function(errResponse){
            console.error('Error while fetching users');
            return $q.reject(errResponse);
        }
);
});

app.js

'use strict';
var App = angular.module('myApp', ['ngRoute','ngResource','datatables']);
App.config(function($routeProvider) {
  var resolveEmpleados = {
    empleados: function (EmpleadoService) {
    return EmpleadoService.fetch();
  }
 };

$routeProvider
 .when('/planilla', {
    controller:'EmpleadoListController as empleadoList',
    templateUrl:'static/js/planilla.html',
  });
});

谢谢大家。

【问题讨论】:

    标签: javascript angularjs angular-datatables


    【解决方案1】:

    既然你使用的是角度渲染方式,为什么不使用ng-click呢:

    <tr ng-repeat="empleado in empleadoList.empleados" ng-click="click(empleado)">
    
    $scope.click = function(empleado) {
      console.log(empleado.apellidoPaterno+' clicked')
    }
    

    【讨论】:

      【解决方案2】:

      我看到您在代码中遗漏了函数:

      function someClickHandler(info) {
          vm.message = info.id + ' - ' + info.firstName;
      }
      
      function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
          // Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)
          $('td', nRow).unbind('click');
          $('td', nRow).bind('click', function() {
              $scope.$apply(function() {
                  vm.someClickHandler(aData);
              });
          });
          return nRow;
      }
      

      别忘了这一点:

      vm.someClickHandler = someClickHandler;
      

      您可以在here阅读文档

      希望能帮到你。

      【讨论】:

        【解决方案3】:

        你快到了。行元素可以从行回调函数中作为 nRow 访问。

        例如,您可以通过如下方式切换所选类来更改行的颜色

        $scope.$apply(function() {
              $(nRow).toggleClass('selected');
              // do your stuff with the row here
        });
        

        nRow 让您可以访问行元素。

        然后是 aData,它为您提供了一个数组,其中包含该行中 td 或 column 元素的值。

        $scope.$apply(function() {
              console.log(aData);
              // do your stuff with the row here
        });
        

        【讨论】:

          【解决方案4】:

          也许这段代码可以帮助我们:

          import { Component, OnInit } from '@angular/core';
          
          @Component({
            selector: 'app-row-click-event',
            templateUrl: 'row-click-event.component.html'
          })
          export class RowClickEventComponent implements OnInit {
            message = '';
            dtOptions: DataTables.Settings = {};
          
            constructor() { }
          
            someClickHandler(info: any): void {
              this.message = info.id + ' - ' + info.firstName;
            }
          
            ngOnInit(): void {
              this.dtOptions = {
                ajax: 'data/data.json',
                columns: [{
                  title: 'ID',
                  data: 'id'
                }, {
                  title: 'First name',
                  data: 'firstName'
                }, {
                  title: 'Last name',
                  data: 'lastName'
                }],
                rowCallback: (row: Node, data: any[] | Object, index: number) => {
                  const self = this;
                  // Unbind first in order to avoid any duplicate handler
                  // (see https://github.com/l-lin/angular-datatables/issues/87)
                  $('td', row).unbind('click');
                  $('td', row).bind('click', () => {
                    self.someClickHandler(data);
                  });
                  return row;
                }
              };
            }
          }
          ```
          
          Link where i found this example:
          [Link github datatables examples][1]
          
          
            [1]: https://github.com/l-lin/angular-datatables/blob/master/demo/src/app/advanced/row-click-event.component.ts
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-07-06
            • 2019-04-23
            • 1970-01-01
            • 1970-01-01
            • 2017-05-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多