2016-01-17 93 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