AngularJS指令包装器与Kendo一起泄漏内存



我已经做了一段时间了,所以我现在正在寻求一些外部帮助。基本要点是,我们在应用程序中使用Kendo,但我们希望为提供的每个内置Kendo指令创建指令包装器。这允许覆盖功能,并以更可重用的格式为应用程序处理我们想要的事情。也就是说,我注意到一些内存泄漏错误,这些错误在使用直接剑道下拉列表指令时不会出现。

这个例子的plunkr可以在这里访问:http://plnkr.co/edit/SXhrkGbMnRRgDjI3v2kR?p=preview

下面包含我希望通过重写指令控制器内的功能来实现的标记。

 <div dir-custom-dropdown="row.controls.customDDL" data-text-field="textfield" 
                data-value-field="textfield" data-datasource="row.dsSearchAndOr" data-ng-model="row.properties.searchAndOr"></select>

我使用的可重复步骤是通过单击前两行上的addrow来创建两个新行。单击第二行上的"删除行"两次,返回到一行。在Chrome开发工具中获取一个堆快照,再重复该过程2次,然后对快照1和2之间分配的对象进行比较。还有更多的信息仍在分配中,我有点困惑是什么在保存它

屏幕和剩菜的例子也可以在这里找到,以便进行比较:https://i.stack.imgur.com/7UdeX.jpg

我试着在某一点上保留对剑道下拉列表的引用,并手动调用其方法,但在kendo.all.js:中的这一行destroy中出现了错误

那_arrow.off();

_箭头未定义。因此,我不确定是否有推荐的方法来清理它,或者这是不受支持的,但我们确实需要为kendo指令提供包装器,以根据我们的应用程序需求进行自定义。

我确信我在为下拉列表创建隔离范围时做错了什么,但这就是我想要走的路。任何明显的,我没有做的清理将是伟大的。

我们在kendo ui小部件和内存泄漏方面也遇到了类似的问题。我们的案例具体与路由有关。当新路由生成新的HTML时,以前路由中的任何剑道小部件都永远不会被清理,因此我们出现了内存泄漏。

一个行之有效的解决方案是在更改路由之前清理现有的HTML。因此,无论我们在哪里通过更改到新的路线

$location.path('/my/new/route')

我们执行一些额外的代码来清除之前视图中的HTML,使用:

kendo.destroy(document.body);
$('.view-root-node').html('');

第一行清理HTML中的任何剑道小部件。第二行还清理了可能遗漏的其他内容,包括孤立的事件处理程序等。组合确保了即使在负载下内存也保持不变。

这为我们解决了这个问题。

最新更新