Невозможно прочитать "выбор" свойств undefined

Я использую ui-grid. Но я не могу получить $scope.gridApi от функции загрузки. И получите ошибку: Невозможно прочитать "выбор" свойства undefined. Кто-нибудь может сказать мне причину? спасибо.

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

Ответ 1

Существует три потенциальные причины:

  • во-первых, не включая правильный выбор, не включая модуль в вашем js-коде в качестве зависимости, или не включая директиву определения вашей сетки в вашем html. Это приведет к наличию gridApi, но не gridApi.selection
  • во-вторых, пытаясь вызвать это до того, как onRegisterApi уволил или определил onRegisterApi на ваших gridOptions после того, как onRegisterApi уже запущен. Это приведет к тому, что метод не будет вызван, и поэтому $scope.gridApi будет undefined, который из вашего текста ошибки звучит как проблема.
  • Наконец, проблемы с вашим вызовом, которые означают, что $scope вашего запроса на загрузку отличается от $scope, который вы ввели gridApi. Это не должно произойти, но я думаю, это возможно. Вы могли бы это сказать, поставив точку останова в методе, чтобы увидеть, какой у него $scope.

Ответ 2

Я решил эту проблему после проверки:

  • загружается ui-grid css (ui-grid.min.css)
  • Загружена библиотека ji-скриптов ui-grid (ui-grid.min.js)
  • 'ui.grid' и 'ui.grid.selection' добавлены в инициализацию модуля app = angular.module('app',[ 'ui.grid','ui.grid.selection']))
  • добавление директивы ui-grid-selection в разметку ui-сетки
    <div id="my-grid" ui-grid="gridOptions" ui-grid-selection ></div>