我有一个控制器,我想在监视方法中调用控制器中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>
如何在角度中执行这部分代码?
答案 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
。