2016-12-16 14 views
0

このexampleの2番目の答えを使用して、Angularjsフレームワークを使用してDatatable jQueryを作成しようとしています。 ng-repeatがテーブルをロードするとすぐに、DataTable()を初期化します。AngularjsでDatatableを使用しているエラー

矢印、フィルタ、検索バーが表示されますが、何らかの理由で矢印をクリックしてもソートされません。彼らは上下に切り替えますが、並べ替えはしません。検索ボックスでは、行の実際の値を検索するときにヘッダー名で検索します。

ボタンがクリックされ、HTTP応答が受信されると、テーブルの "itms"に値が設定されるため、テーブル全体がレンダリングされるまで.DataTable()は呼び出されません。

私はまた、itmsがハードコードされていて、完全に動作するテーブルだけでテストしました。私は何が欠けていますか?

JS:

angular.module('abcapp') 
.directive('repeatDone', function() { 
    return function(scope, element, attrs) { 
     if (scope.$last) { // all are rendered 
      $('#my-table').DataTable(); 
     } 
    } 
}) 

HTML:

<div ng-if="itms && itms.length > 0" class="row"> 
<table id="my-table" class="table table-striped" cellspacing="0" width="100%"> 
    <thead> 
     <tr> 
      <th>a</th> 
      <th>b</th> 
      <th>c</th> 
      <th>d</th> 
     </tr> 
    </thead> 
    <tfoot> 
     <tr> 
      <th>a</th> 
      <th>b</th> 
      <th>c</th> 
      <th>d</th> 
     </tr> 
    </tfoot> 
    <tbody> 
     <tr ng-repeat="itm in itms track by $index" repeat-done> 
     <td>{{itm.a}}</td> 
     <td>{{itm.b}}</td> 
     <td>{{itm.c}}</td> 
     <td>{{itm.d}}</td> 
     </tr> 
    </tbody> 
    </table> 
</div> 
+1

はちょうどFYI、すでにこのために設計されて完全に肉付けライブラリが存在し、[角度-のDataTable](http://l-lin.github.io/angular-datatables/#/welcome) 。 – Claies

答えて

1

ラップ$タイムアウトでjQueryのコール:

.directive('repeatDone', function($timeout) { 
    return function(scope, element, attrs) { 
     if (scope.$last) { // all are rendered 
     $timeout(function() { 
      $('#my-table').DataTable(); 
     }); 
     } 
    } 
    }) 
+0

えええええええええと...私はドキュメントを見て、時間のデフォルト値は0なので、タイムアウトを200msに設定しようとしました私はconsole.log($( "#my-table tr"))を入れてみました。行数を記録すると正しく出力されているようです。 – user3125693

0

私は、関数のラッパーでのDataTable()の呼び出しを入れて働いた。タイムアウトが呼び出されず、タイムアウト内の関数が呼び出されていたと思います。私は括弧なしで$(...).DataTableを指定しようとしましたが、角度エラーがありましたので、これが私の解決策でした。

ただし、別の問題が発生しています...初めてテーブルが作成された後にテーブルが更新されるたびに、要素は変更されません。

angular.module('...') 
.directive('repeatDone', function($timeout) { 
    return function(scope, element, attrs) { 
     function initWrapper(){ 
      $('...').DataTable(); 
     } 
     if (scope.$last) { 
      $timeout(initWrapper,200); 
     } 
    } 
}) 
関連する問題