2015-04-20 1 views
10

sto usando ui-grid. Ma non riesco a ottenere $ scope.gridApi dalla funzione di download. E ottieni l'errore: Impossibile leggere la 'selezione' della proprietà di indefinito. Qualcuno può dirmi il motivo? Grazie.Impossibile leggere proprietà 'selezione' di indefinito

$scope.gridOptions.onRegisterApi = function (gridApi) { 
     $log.info('gridApi...'); 
     $scope.gridApi = gridApi; 
     $log.info($scope.gridApi); 
    }; 
    $scope.download = function ($event) { 
     $event.stopPropagation(); 
     var selectedRows = $scope.gridApi.selection.getSelectedRows(); 
     $log.log('selectedRows....'); 
     $log.log(selectedRows); 
    }; 
+2

Hai incluso il modulo ui.grid.selection come una dipendenza? – c0bra

+0

sì. L'ho fatto. La manipolazione di $ scope.gridOptions.onRegisterApi non può modificare il valore della variabile. Perché? Si riferisce a ui-grid? – Charles

+0

prova ad aggiungere questo al tuo onRegisterApi: gridApi.selection.on.rowSelectionChanged ($ scope, function (row) { // }); – thangcao

risposta

6

ci sono tre possibili cause:

  • primo luogo, non è compresa la selezione correttamente, o non compreso il modulo nel codice js come una dipendenza, o no tra cui la direttiva sulla definizione della griglia nella vostra html. Ciò si tradurrà nell'avere una grigliaApi, ma nessuna grigliaApi.selection
  • in secondo luogo, provare a chiamare questo prima che suRegisterApi sia stato attivato, o definire onRegisterApi sulla grigliaOpzioni dopo che suRegisterApi è già stato attivato. Questo comporterà il fatto che il metodo non viene chiamato, e quindi $ scope.gridApi è indefinito, che dal tuo testo di errore suona come il problema.
  • , infine, i problemi con la vostra invocazione che significa che il $ ambito della chiamata scaricare è diverso da quello del $ ambito si inserisce il gridApi su. Questo non dovrebbe accadere davvero, ma credo che potrebbe. Si potrebbe dire questo mettendo un breakpoint nel metodo per vedere quale $ scope ha.
0

Ho risolto questo problema dopo verifica:

  • ui-griglia css caricata (ui-grid.min.css)
  • ui-grid libreria javascript caricata (ui-grid.min.js)
  • 'ui.grid' e 'ui.grid.selection' aggiunto al modulo inizializzazione app = angular.module('app',['ui.grid','ui.grid.selection']) `)
  • aggiungendo il ui-grid-s direttiva elezione al markup ui-grid
    <div id="my-grid" ui-grid="gridOptions"ui-grid-selection></div>