306_expandable_grid — невозможно прочитать свойство «данные» undefined

я работаю над ui-grid и 306_expandable_grid, я использовал точный код, как в документе, но столкнулся с проблемой с ошибкой.

app.js

$http.get('resources/data/title2.json')
    .success(function(data){

        console.log(data);
        console.log(data[0].Data);
        console.log(data.length);
        for(i = 0; i < data[i].length; i++){
           data[i].subGridOptions = {
                  columnDefs: [ 
                    {name:"Title" },
                    {name:"Jan-10" },
                    {name:"Feb-10"},
                    {name:"Mar-10" },
                    {name:"Apr-10" },
                    {name:"May-10" },
                    {name:"Jun-10" },
                    {name:"Jul-10" },
                    {name:"Aug-10" },
                    {name:"Sep-10" },
                    {name:"Oct-10" },
                    {name:"Nov-10" },
                    {name:"Dec-10" }
                ],
              data: data[i].Data
          }
      }
        // $scope.subGridOptions.data = data;
        $scope.gridOptions.data = data;
        // $scope.title = data[0].Title;
    });

externalHtmlFile.html

<div ui-grid="row.entity.subGridOptions" style="height:150px;"></div>

это ошибка, с которой я застрял

 TypeError: Cannot read property 'data' of undefined
    at new <anonymous> (http://localhost/ng-Grid/resources/scripts/ui-grid-unstable.js:2883:41)
    at Object.e [as invoke] (http://localhost/ng-Grid/resources/scripts/angular.min.js:36:456)
    at E.instance (http://localhost/ng-Grid/resources/scripts/angular.min.js:75:118)
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:58:276
    at r (http://localhost/ng-Grid/resources/scripts/angular.min.js:7:408)
    at M (http://localhost/ng-Grid/resources/scripts/angular.min.js:58:260)
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:65:412
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:109:276
    at h.$eval (http://localhost/ng-Grid/resources/scripts/angular.min.js:123:139)
    at h.$digest (http://localhost/ng-Grid/resources/scripts/angular.min.js:120:220)

когда я нажимаю на значок плюса, возникает ошибка ... я не мог найти решение, которое я могу понять. пожалуйста помоги


person Sandeep kumar H R    schedule 29.10.2014    source источник


Ответы (1)


Во-первых, убедитесь, что вы инициализируете $scope.gridOptions вне обратного вызова $http.get success. Добавляйте только $scope.gridOptions.data[i].subGridOptions в $scope.gridOptions внутри обратного вызова success. Ссылка:

Вы не можете определить параметры сетки в успешном вызове. Вам нужно определить их в области действия вашего контроллера, а затем установить определения данных или столбцов и т. д. из успешного вызова.

Во-вторых, убедитесь, что контроллер сетки/страницы не имеет каких-либо перенаправлений, зависящих от параметров инициализации. Я столкнулся с тем же сообщением об ошибке, сгенерированным из-за следующего фрагмента кода, который был на странице:

if (typeof clientcode === 'string' && clientcode !== '') {

    var payload = {
        clientcode : storedClientcode
    }

} else {

    $location.path('/');

}

Идея здесь заключалась в том, чтобы проверить, был ли storedClientcode предоставлен вызывающей страницей (через общую корневую службу приложения), и, если нет, перенаправить на главную страницу приложения. Но UI-grid, по-видимому, делает отдельные подвызовы к странице, на которой он находится, и эти подвызовы, конечно, не предоставляют данные, которые я искал в своем коде, поэтому перенаправление произошло позади сцены для этих звонков. Никаких ошибок (кроме того, что вы также видели) не было, и данные не отображались в сетке. Мне потребовалось некоторое время, чтобы понять это (я новичок в AngularJS, и для меня это было первое применение ui-grid). Надеюсь, это кому-то поможет, даже если это не решит этот вопрос.

person Ville    schedule 30.10.2014
comment
да, спасибо за объяснение, сэр ... даже я новичок в angularJS. Я понял, что пошло не так, я записываю это. Аргумент field в columnDefs : [{name:'title' , **field: 'title'**}, ...]; вызывал у меня проблемы в моем контексте, я определил область действия gridoptions, как это $scope.gridOptions = { expandableRowTemplate: 'externalhtmlfile.html', expandableRowHeight: 300, aggregationHideLabel: false }. мне потребовалось некоторое время, чтобы понять его field, к которому привязываются данные. - person Sandeep kumar H R; 01.11.2014
comment
Также обратите внимание, что field — это псевдоним name, доступный для целей обратной совместимости. В документах API указано: свойство поля можно использовать в место имени для обратной совместимости с 2.x. Вы можете использовать displayName, чтобы изменить способ заголовка столбца в сетке, например: { name: 'field1', displayName: 'pretty display name' }. - person Ville; 01.11.2014
comment
Я была такая же проблема. Я дал gridOptions перед вызовом http.get и дал scope.gridOptions{data: GET RESPONSE DATA} внутри раздела успеха. - person Shamseer; 06.09.2015