0

私はangular datatablesを使用しています。これは、人気のある jquery datatables ライブラリの角度付きバージョンです。

これが私のhtmlです

<body ng-controller="TestCtrl">

    <input type="button" ng-click="changeColumns()" value="Change Columns"/>
    <table datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="row-border hover"></table>

</body>

ここに私のjavascriptがあります

var module = angular.module('TestApp', ['datatables']);

module.controller('TestCtrl', [
    '$scope',
    'DTOptionsBuilder',
    'DTColumnBuilder',
    function($scope, DTOptionsBuilder, DTColumnBuilder) {

         $scope.dtOptions = DTOptionsBuilder.newOptions();

         $scope.dtColumns = [
             DTColumnBuilder.newColumn('ColumnA').withTitle('ColumnA'),
             DTColumnBuilder.newColumn('ColumnB').withTitle('ColumnB')
         ];

         $scope.changeColumns = function() {
             $scope.dtColumns = [
                 DTColumnBuilder.newColumn('ColumnA').withTitle('ColumnA'),
                 DTColumnBuilder.newColumn('ColumnB').withTitle('ColumnB'),
                 DTColumnBuilder.newColumn('ColumnC').withTitle('ColumnC'),
                 DTColumnBuilder.newColumn('ColumnD').withTitle('ColumnD')
             ];

         };
    }
]);

これは、問題を減らすことができるのと同じくらい簡単ですが、それでも同じエラーが発生します。ページが最初に読み込まれると、期待どおりに「ColumnA」と「ColumnB」が表示されます。次に、テーブルの上にある [列の変更] ボタンをクリックします。

テーブルの行がなくなり、元の 2 つの列が残り、ブラウザ コンソールにこのエラーが表示されます。

Error: headerCells[i] is undefined

厄介なスタック トレースが続きます。以前にリンクしたチュートリアルをコピーしようとしましたが、いくつかの小さな違いがあります。この単純な例がうまくいかない理由がわかりません。誰でも助けてもらえますか?

4

2 に答える 2

5

私のプロジェクトで同じ問題に直面しました。

vm.table.dtInstance.DataTable.destroy();
angular.element('#table-id').children('thead').children().remove();
angular.element('#table-id').children('tbody').children().remove();
vm.table.dtColumns = columnsList;

私を助けてくれました。新しい列リストを設定すると、データテーブル全体が削除され、最初から作成されます。

于 2015-11-19T16:22:01.617 に答える
-1

これを使って

dtColumns.push(DTColumnBuilder.newColumn('ColumnC').withTitle('ColumnC'))
dtColumns.push(DTColumnBuilder.newColumn('ColumnD').withTitle('ColumnD'))
于 2016-04-19T12:04:48.680 に答える