10

プロジェクトに angular-datatables を実装しようとしていますが、「TypeError: 未定義のプロパティ 'aDataSort' を読み取れません」が返されます

私は使っている

Angular js バージョン 1.4.9。

Jquery バージョン 2.1.1

データテーブル バージョン 1.10.10

参考サイト

angular-datatables

私のHTMLコード

<div class="col-md-12" ng-controller="WithAjaxCtrl as showCase"> <table datatable="" dt-options="showCase.dtOptions" dt-columns="showCase.dtColumns" class="row-border hover"></table></div>

私のAngular jsコントローラーコード

angular.module( 'admin.package', [
'ui.router',
'ui.bootstrap',
'datatables',
'datatables.bootstrap',
'ngResource',
'plusOne'
]).controller('WithAjaxCtrl', WithAjaxCtrl);

function WithAjaxCtrl(DTOptionsBuilder, DTColumnBuilder,$http,UserService,localStorageService) {
      UserService.obj.get('packages/index',localStorageService.get('userkey').token).then(function (results) { 
        if(results.status==200){
        var vm = this;
        vm.dtOptions = DTOptionsBuilder.fromSource(results.data.packages)
            .withPaginationType('full_numbers');
        vm.dtColumns = [
           DTColumnBuilder.newColumn('id').withTitle('id'),
            DTColumnBuilder.newColumn('package_name').withTitle('Packag Name'),
            DTColumnBuilder.newColumn('amount').withTitle('Amount'),
            DTColumnBuilder.newColumn('package_duration').withTitle('Amount'),
            DTColumnBuilder.newColumn('currency').withTitle('validity')

        ];
        console.log(vm.dtColumns);
        console.log( vm.dtOptions);
      }else{
             alert('You are not a authorized user');
          }
        }, function(reason) {
            console.log(reason);
        });
    }

前もって感謝します

4

2 に答える 2

8

ページの読み込み時にディレクティブに渡しshowCase.dtOptionsていますが、サービス呼び出しが完了するまで宣言されません。これに対する 1 つの回避策は、サービス呼び出しの後に を使用して html を構築することです。showCase.dtColumnsdatatablesng-if

<table ng-if="showCase.authorized" datatable="" ...

次に、コントローラーで、サービスを呼び出す前に変数を初期化し、呼び出しが完了した後に更新します。

app.controller('WithAjaxCtrl', function WithAjaxCtrl(DTOptionsBuilder, DTColumnBuilder, UserService) {
  var vm = this;
  vm.authorized = false;
  UserService.get()...

これがデモです。を削除することでエラーを再現できますng-ifhttp://plnkr.co/edit/XZYOEvgy1HoMYGmGdAYj?p=preview

于 2016-04-20T23:39:29.707 に答える