【问题标题】:Removing an ng-repeat without leaks删除无泄漏的 ng-repeat
【发布时间】:2015-07-10 10:04:42
【问题描述】:

我一直在查看的基于 Angular 的应用程序中似乎存在内存泄漏,我已将其简化为以下测试用例:http://plnkr.co/edit/JIt8PrV28lKnlSx8I8xP?p=preview

基本上归结为我不知道如何从文档中干净地删除 ng-repeat。如果我使用jQuery().remove(),该表将从文档中消失,但缓存的侦听器(例如$watchCollectionAction())会导致泄漏。

我现在有一个 $scope.$destroy() 电话,我想在该示例中进行清理,但这不是答案...

谢谢!

【问题讨论】:

  • 为什么不先调用 $destroy() 再调用 remove()
  • 我试过了。令我惊讶的是,$destroy() 调用似乎并没有删除 Angular 似乎正在添加的侦听器。
  • 举个例子,我不太清楚你想删除什么? “
  • 我已经添加了persons.splice( 0, persons.length );(上面的 URL 已经更新了),但这并没有清空 HTML。我真正想做的就是从 DOM 中删除项目,而不会造成任何内存泄漏。

标签: javascript jquery angularjs memory-leaks


【解决方案1】:

plunkr 示例在超时功能为时有效

setTimeout( function () {
    vm.persons = [];
    $scope.$apply();
}, 1000 );

$apply 是必需的,因为您从 Angular 机器外部进行了更改(请参阅https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$apply)。

【讨论】:

  • 感谢您指出这一点。但是,它似乎不是一个干净的删除。侦听器缓存中仍有项目正在泄漏。我在这里做了一个更新:run.plnkr.co/plunks/gWEZhKZaqVX52i0QAEFX。这是显示保留缓存的屏幕截图:picpaste.com/Screen_Shot_2015-07-10_at_16.16.40-XIeofB0C.png
  • 我不使用 Chrome,也不知道如何解释它的堆分析,所以在这里我无能为力。但如果这些对象真的泄漏,那将是一个巨大的错误,因此您可以考虑将您的问题发布到 Angular 开发列表中。
猜你喜欢
相关资源
最近更新 更多
热门标签