4

这里我的问题:

我试图建立一个角指令,这将使用ng-table内。 问题在于输入参数tableData初始化为空数组,因为它是在用户单击按钮时从指令的外部设置的。

因此,我在tableData上添加了一块手表,并在tableData更改时尝试重新加载表。

但是,differ.resolve函数最终会出现以下异常。

请帮

指令使用

<table-multiselect table-data="objectArray"></table-multiselect> 

这是我临时

TableMultiselect.tmpl.cshtml

<table ng-table="multiselect" class="table"> 
    <tr ng-repeat="feature in $data"> 
      <td data-title="'Id'" sortable="'id'">{{feature .id}}</td> 
      <td data-title="'Name'" sortable="'name'">{{feature .name}}</td> 
      <td data-title="'Type'" sortable="'type'">{{feature .type}}</td> 
    </tr> 
</table> 

控制器

.directive('TableMultiselect', function (ngTableParams) { 
    return { 
     restrict: 'E', 
     templateUrl: 'TableMultiselect.tmpl.cshtml', 
     scope: { 
      tableData: '=' 
     }, 
     controller: function ($scope) { 

      var buildMultiSelectTable = function() { 
       return new ngTableParams({ 
        page: 1, 
        count: 10, 
        sorting: { 
         id: 'asc' 
        }, 
        filter: {}, 

       }, { 
        counts: [10], 
        total: $scope.tableData.length, // length of data 
        getData: function ($defer, params) { 
         var data = $scope.tableData; 
         if (data.length <= 10) { 
          params.settings({ 'counts': [] }); 
         } 
         params.total(data.length); 
         $defer.resolve(data); 
        } 
       }); 
      }; 

      $scope.multiselect = buildMultiSelectTable(); 

      $scope.$watch('tableData', function (newValue, oldValue) { 
       if ($scope.tableData != undefined && $scope.tableData.length > 0) { 
        $scope.multiselect.reload(); 
       } 
      }); 
     }, 


    }; 
}); 

错误

是从您粘贴代码明显
TypeError: Cannot set property '$data' of null 
    at angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:3095 
    at l.promise.then.J (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:101) 
    at angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:102 
    at h.a.$get.h.$eval (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:113) 
    at h.a.$get.h.$digest (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:110) 
    at h.a.$get.h.$apply (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:113) 
    at m (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:72) 
    at w (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:77) 
    at XMLHttpRequest.B.onreadystatechange (angular?v=M5FbIdPbFPNnbg6slbXZa4DR7EKc6tL5nLLGAVGYAa41:79) 

回答

-1

的一个问题是指令的名称应该是“tableMultiSelect”而不是“TableMultiSelect”

app.directive('tableMultiselect', function (ngTableParams) { 

可能还有其他哪些是问题很难猜测出来看完整的代码,所以这里的工作实现基于我的理解你的问题:http://plnkr.co/edit/7MHhl6AKdfzajprfc0xK?p=preview

这就是你的对象数组在运行时改变。

app.controller('AppCtrl',function($scope,$timeout){ 
    $scope.objectArray = []; 

    $timeout(function(){ 
     $scope.objectArray.push({ 
     id: 1, 
     name : "Abc", 
     type : "type1" 
     }); 
    },2000); 

    }); 
相关问题