Angular DataTable 未填充 DTInstance

Posted

技术标签:

【中文标题】Angular DataTable 未填充 DTInstance【英文标题】:Angular DataTable not populating DTInstance 【发布时间】:2016-03-03 00:39:20 【问题描述】:

渲染后我没有填充我的 DtInstance。任何人都遇到过这个问题。

<div ng-controller="InventoryTableController as vm">
          <table datatable="" dt-options="vm.dtOptions" dt-columns="vm.dtColumns"
                 dt-instance="vm.dtInstance"
                 class="display table table-bordered table-striped table-hover"></table>
      </div>

【问题讨论】:

你的控制器是什么样子的? 感谢 Alger 调查此问题,我能够通过 vm.dtInstance = null; 修复它 【参考方案1】:

我可以通过 https://github.com/l-lin/angular-datatables/issues/365 修复它

问题是因为我这样初始化了dataHolder

vm.dtInstance = ;

当我将其更改为 vm.dtInstance = null; 时它已修复 甚至vm.dtInstance = undefined 也行不通。

【讨论】:

记得接受您自己的答案,以便未来的访问者可以看到这是一个可靠的解决方案。【参考方案2】:

只需在此处添加我的 2 美分。

对我来说,问题已通过线程中的@rosshays 解决方案解决:https://github.com/l-lin/angular-datatables/issues/345

2017 年 12 月 4 日更新: 根据@trainoasis 的建议,我将解决方案复制到此处。

在你的控制器中

$scope.nested = ;
$scope.nested.dtInstance = 

在你的 html

<table
    datatable=""
    class="table table-striped table-hover table-bordered table-condensed"
    dt-options="dtOptions"
    dt-columns=dtColumns
    dt-instance="nested.dtInstance">
</table>

【讨论】:

当没有其他答案时,这对我也有用。我建议您在链接旁边的答案中添加一些有关如何实现此目的的信息,因为它不需要太多...如果链接失效会更有帮助..【参考方案3】:

对我来说甚至 vm.dtInstance = null;不工作。 我最终浏览了指令的来源,发现 dt-instance 也可以是一个 setter 函数。这为我解决了问题。

vm.setDTInstance = function(dtInst)
    vm.myTable = dtInst;
;

【讨论】:

你添加了 dt-instance="vm.setDTInstance" 还是什么?就这样?在这样做之前,您的 dtInstance 是未定义的?在您的情况下,myTable 是什么?我正在使用 Angular 数据表,所以我根本没有定义表...【参考方案4】:

我正在使用

.withOption('serverSide', true).withFnServerData(getDataFromServer)

我也遇到了同样的问题,但是用下面的代码解决了:

控制器

$scope.dtInstance = ;
$scope.dtIntanceCallback = function (instance) 
    $scope.dtInstance = instance;

$scope.dtRebind = function () 
    $scope.dtInstance.DataTable.draw()

HTML

<table datatable dt-instance="dtInstanceCallback"></table>
<button ng-click="dtRebind">Rebind</button>

【讨论】:

【参考方案5】:

另一种触发方式是使用&lt;... ng-repeat="table in tables"&gt; &lt;table datatables="ng" dt-instance="dtInstance" ... &gt; 遍历一系列表。当有多个表时,这样dtInstance 可能不会引用您期望的表,这并不奇怪。

但是,当您知道集合中始终只有一个表时,您可能希望 dtInstance 引用该实例。但事实并非如此。在我的情况下,解决方案是去掉额外的层并简单地使用一个表。

【讨论】:

以上是关于Angular DataTable 未填充 DTInstance的主要内容,如果未能解决你的问题,请参考以下文章

Angular 的 ngOnInit 中未填充数据

表单未预先填充Angular 8

Angular Material:布局填充未填充父 <div>

Angular Directive 未填充 ui-sref

GridView 未显示 DataTable 中的所有列

JSON 数据未填满 DataTable