我的应用程序中有一个驾驶舱,有不同的D3图表和Angular中的数据表,分布在三个标签上。 所有数据都来自API,并与Datapromises一起使用。 客户希望能够过滤数据,例如使用特定的projectNr。过滤也是通过API完成的,因此应用程序将使用正确的参数再次发送请求。
这一切在Chrome 56.0,Firefox 51.0.1和Safari 10.0.2中运行良好
问题出现在Internet Explorer 11(可能还有其他IE版本)
中我会告诉您工作流程如何在Chrome中运行。
蓝色日志只是JavaScript console.time()
。
对于每个触发的API请求,HTTP.GET
和GOT
日志来自我们的ApiService。
所以现在你看到第一次访问驾驶舱我们得到了请求allManagerData
。此请求获取我们填写驾驶舱图表和表格所需的所有数据。
然后我们有一些自动完成输入,这些输入与API有关。此API调用recordsearch
获取自动完成输入的选项选项。
当从自动完成输入中选择一个对象时,过滤逻辑开始。它实际上是相同的,就像初始加载一样,只是API请求获得了具有正确过滤器值的其他参数。在第二个allManagerData
请求返回后,将重新呈现所有数据表和图表。
这很好,但不是在IE中! 当IE11完全相同的输入时,这是控制台。
你看到rerender-函数被初始请求正确调用,但是第二个请求它会在第一次重新渲染时崩溃。不关心哪一个是第一个,它是第一个DataTable.rerender()
在两种情况下(初始和过滤后)将使用$cockpit.rerenderDataTables();
$cockpit.rerenderDataTables = function () {
if ($cockpit.dtStars.DataTable) {
console.log('rerenderTable 1');
$cockpit.dtStars.rerender();
}
if ($cockpit.dtNote10.DataTable) {
console.log('rerenderTable 2');
$cockpit.dtNote10.rerender();
}
if ($cockpit.dtYesNo.DataTable) {
console.log('rerenderTable 3');
$cockpit.dtYesNo.rerender();
}
if ($cockpit.dtProjects.DataTable) {
console.log('rerenderTable 4');
$cockpit.dtProjects.rerender();
}
};
前端的数据表如下:
<table datatable="ng" dt-options="$cockpit.dtConfig.dtOptions" class="row-border stripe hover" dt-instance="$cockpit.dtStars">
我真的不知道IE11中的.rerender()
函数有什么问题。
任何人都使用Angular1 Datatables并且在IE上重新渲染时遇到问题? 还是其他任何想法?
谢谢!