2017-08-13 2 views
0

Je suis en train d'utiliser la grille de l'interface utilisateur de mon application angulaire, mais je reçois ci-dessous erreur:13920 TypeError: Impossible de lire la propriété « données » undefined à de nouvelles <anonymous> (ui-grid.js: 3332) à Object.invoke

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 est ici la réponse que je reçois grâce à un appel http. Ironiquement, le même morceau de code fonctionne quand je l'appelle d'un autre contrôleur mais échoue pour ce contrôleur.

+0

La liaison de données se produit avant le retour de votre appel http, ce qui le lie à 'res = null'. – KreepN

+0

Alors, comment pouvons-nous nous assurer que la liaison de données se produit après l'appel http? –

Répondre

0

Puisque vous ne publiez pas votre httpget qui renseigne les données, vous devrez modifier ma réponse en fonction de votre code:

$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 
    } 
); 

ci-dessus définira res comme un tableau vide qui provoquera le courant code pour montrer une grille vide. En ayant la variable res sur la portée, elle sera surveillée pour les changements. Lorsque le httpget se termine, l'appel de réussite est renvoyé et renomme $scope.res et votre grille sera également notifiée et mise à jour.