如何调用角度数据表的销毁功能?

时间:2015-07-20 15:54:33

标签: angularjs angular-datatables

我有一个控制器,我想在监视方法中调用控制器中Jquery Datatables的destroy函数:

      $scope.$watch('model.SelectedWaiver', function() {
        if ($scope.model.SelectedWaiver.SurchargeID != null) {
            //destroy table here
            $scope.getIndecies($scope.model.SelectedWaiver);

        }
    });

我目前没有以任何方式设置表格,因为页面上有两个表格:

第一

<table datatable="ng" dt-options="dtOptions" dt-columns="dtColumns" class="table-bordered">
    //stuff
</table>

第二

<table datatable="ng" id="secondTable" dt-options="dtOptions" dt-columns="dtColumns" class="table-bordered">
    //stuff
</table>

当用户在第一个表中选择不同的行时,我想销毁此表。

jquery等价物:

<script>
    $(document).ready(function() {
        var table = $('#secondTable').DataTable();


    });
    $('#selectedWaiver').on('change', function () {
        table.destroy();
    });
</script>

如何在角度中执行这部分代码?

Using this to inject datatables

1 个答案:

答案 0 :(得分:5)

使用dtInstance,您可以访问dataTables API:

$scope.dtInstance = {};

dtInstance作为声明添加到表

<table datatable dt-instance="dtInstance" dt-options="dtOptions" dt-columns="dtColumns">

现在您可以使用

销毁dataTable
$scope.dtInstance.DataTable.destroy();

angular dataTables有一个扩展的ngDestroy()清理自己的绑定:

$scope.dtInstance.DataTable.ngDestroy();

标题中仍然有一些style(并且还剩下一点垃圾),所以也要删除它们(这里的标识为#table的表格):

$scope.destroy = function() {
    $scope.dtInstance.DataTable.ngDestroy();
    var i, ths = document.querySelectorAll('#table th');
       for (i=0;i<ths.length;i++) {
          ths[i].removeAttribute('style'); 
       }
    }
}

演示 - &gt;的 http://plnkr.co/edit/fQ9YjsbNBNzyYuuvpk6T?p=preview

如果您有多个角度数据表,请使用多个dtInstances和不同的表id's