13920 TypeError:无法读取属性&#39;数据&#39;在Object.invoke的新<anonymous>(ui-grid.js:3332)中未定义

时间:2017-08-13 03:17:42

标签: angularjs angular-ui-grid ui-grid

我正在尝试使用我的角度应用程序中的UI网格,但我收到以下错误:

TypeError: Cannot read property 'data' of undefined
    at new <anonymous> (ui-grid.js:3332)
    at Object.invoke (angular.js:4718)
    at S.instance (angular.js:10354)
    at p (angular.js:9263)
    at angular.js:9673
    at angular.js:16383
    at m.$eval (angular.js:17682)
    at m.$digest (angular.js:17495)
    at m.$apply (angular.js:17790)
    at l (angular.js:11831)

HTML:

<div ui-grid="gridOptionsGeneral" class="myGrid"></div>

JS:

$scope.gridOptionsGeneral = {};
            $scope.gridOptionsGeneral = {
                enableFiltering: true,
                data: res,
                columnDefs: [
                     { field: 'Col1' },
                     { field: 'Col2' },
                     { field: 'Col3' },
                     { field: 'Col4' },
                     { field: 'Col5', enableFiltering: false},
                    { field: 'data1', enableFiltering: false},
                    { field: 'data2', enableFiltering: false},
                    { field: 'data3', enableFiltering: false}
                ],
                onRegisterApi: function (gridApi) {
                    $scope.gridApi = gridApi;
                }
            };

此处res是我通过http呼叫获得的响应。具有讽刺意味的是,当我从另一个控制器调用它时,同一段代码可以正常工作,但是对于这个控制器来说却失败了

1 个答案:

答案 0 :(得分:0)

由于您没有发布填充数据的httpget,因此您必须修改我的答案以适合您的代码:

$scope.res = [];
$scope.gridOptionsGeneral = {};
$scope.gridOptionsGeneral = {
    enableFiltering: true,
    data: $scope.res,
    columnDefs: [
    { field: 'Col1' },
    { field: 'Col2' },
    { field: 'Col3' },
    { field: 'Col4' },
    { field: 'Col5', enableFiltering: false},
    { field: 'data1', enableFiltering: false},
    { field: 'data2', enableFiltering: false},
    { field: 'data3', enableFiltering: false}
    ],
    onRegisterApi: function (gridApi) {
       $scope.gridApi = gridApi;
    }
};


$http.get(url, config)
.then(
   function(response){
      //success call
      $scope.res = response.data;
   }, 
   function(response){
     // failure call back
   }
);

以上将res定义为空数组,这将导致当前代码显示空网格。通过在范围上使用res变量,将监视更改。当httpget完成后,成功调用将被触发并重新绑定$scope.res,您的网格也会得到通知和更新。