2016-01-17 183 views
1

此ngTable demo显示捕获事件使用underscore.js(例如_.partial),我试图运行它没有这种依赖性。在ngTable中捕获事件

在这plunker我有一个简化的版本(没有underscore.js),工程(看控制台日志),但我也得到一个ngTable错误Cannot read property 'apply' of undefined

这段代码有什么问题?如何不包括underscore.js

HTML

<div ng-controller="myCtl" ng-app="app"> 
    <table ng-table="tableParams" class="table table-bordered"> 
     <tbody> 
      <tr ng-repeat="u in $data"> 
       <td title="'User ID'">{{ u.uid }}</td> 
       <td title="'Name'">{{ u.nm }}</td> 
       <td title="'Group'">{{ u.ugr }}</td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

的Javascript

var app = angular.module('app', ['ngTable']); 

app.controller('myCtl', function($scope, NgTableParams,ngTableEventsChannel) { 

     $scope.data = [{ 
      uid: 'User 1', 
      nm: 'Name 1', 
      ugr: 'Group 1' 
     }, { 
      uid: 'User 2', 
      nm: 'Name 2', 
      ugr: 'Group 2' 
     }]; 

     var tableEvents = []; 

     function subscribeToTable(tableParams){ 
      var logAfterCreatedEvent = logEvent (tableEvents, "afterCreated"); 
      ngTableEventsChannel.onAfterCreated(logAfterCreatedEvent, $scope, $scope.tableParams); 
      var logAfterReloadDataEvent = logEvent (tableEvents, "afterReloadData"); 
      ngTableEventsChannel.onAfterReloadData(logAfterReloadDataEvent, $scope, $scope.tableParams); 
     } 

     function logEvent(list, name){ 
     console.log(">>>>>>> " + name); 
     } 

     $scope.$watch("tableParams", subscribeToTable); 

     $scope.tableParams = new NgTableParams({ 
      count: 5 
     }, { 
      data: $scope.data 
     }); 

}); 

回答

1

嗯,是的,该代码不能工作。您可以通过给ngTable回调函数的名称定义两个回调,但不是给它的参考功能,你给它的返回值:

var logAfterCreatedEvent = logEvent (tableEvents, "afterCreated"); 
var logAfterReloadDataEvent = logEvent (tableEvents, "afterReloadData"); 

功能logEvent不返回任何内容,因此logAfterCreatedEventlogAfterReloadDataEventundefined

ngTableEventsChannel.onAfterCreated (
    logAfterCreatedEvent, 
    $scope, 
    $scope.tableParams 
); 

ngTableEventsChannel.onAfterReloadData (
    logAfterReloadDataEvent, 
    $scope, 
    $scope.tableParams 
); 

而且,随着它试图调用回调函数,Angular会下降。

一个解决将是改写logEvent()成返回一个回调函数的函数:

function logEvent(list, name){ 
    var that = this; 
    that.list = list; 
    that.name = name; 
    return function() { 
    console.log(">>>>>>> " + that.name); 
    }; 
    } 

Here's a fixed version on JSBin