Javascript 在无泄漏的情况下拆卸ng重复件

Javascript 在无泄漏的情况下拆卸ng重复件,javascript,jquery,angularjs,memory-leaks,Javascript,Jquery,Angularjs,Memory Leaks,我一直在看的一个基于角度的应用程序中似乎存在内存泄漏,我已将其简化为以下测试用例: 基本上,这归结为一个事实,我不知道如何从文档中干净地删除ng repeat。如果我使用jQuery().remove()该表将从文档中消失,但缓存的侦听器(例如$watchCollectionAction()会导致泄漏 我现在有一个$scope.$destroy()调用,我想在示例中清理一下,但这不是答案 谢谢 如果超时函数为 setTimeout( function () { vm.persons =

我一直在看的一个基于角度的应用程序中似乎存在内存泄漏,我已将其简化为以下测试用例:

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

我现在有一个
$scope.$destroy()
调用,我想在示例中清理一下,但这不是答案


谢谢

如果超时函数为

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

由于您从角度机械外部进行了更改(请参阅$rootScope.Scope#$apply),因此需要使用
$apply

如果超时功能为

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

$apply
是必需的,因为您从角度机械外部进行了更改(请参见$rootScope.Scope#$apply)。

为什么不先调用$destroy(),然后再调用remove(),我已经试过了。令我惊讶的是,
$destroy()
调用似乎没有删除Angular似乎要添加的侦听器。给定示例,我不太清楚要删除什么?“我已经添加了
persons.splice(0,persons.length);
(上面的URL已经更新了)创建的所有行,但这并没有清空HTML。我真正想做的就是从DOM中删除这些项,而不发生任何内存泄漏。为什么不先调用$destroy(),然后再调用remove()我已经试过了。让我惊讶的是,
$destroy()
调用似乎没有删除Angular似乎要添加的侦听器。给定示例,我不太清楚要删除什么?所有由“我已添加
persons.splice(0,persons.length)”创建的行(上面的URL已经更新了),但这并没有清空HTML。我真正想做的就是在没有内存泄漏的情况下从DOM中删除这些项。谢谢你指出这一点。然而,这似乎不是一个干净的删除。侦听器缓存中仍有泄漏的项。我在这里更新了一个plunk:。这是一个显示保留缓存的屏幕截图:我不使用Chrome,也不知道如何解释它的堆分析,所以我在这里无能为力。但是如果这些对象真的泄漏了,这将是一个巨大的错误,所以你可以考虑把你的问题发布在一个角度的DEV列表中。谢谢你指出。然而,这似乎不是一个干净的删除。侦听器缓存中仍有泄漏的项。我在这里更新了一个plunk:。这是一个显示保留缓存的屏幕截图:我不使用Chrome,也不知道如何解释它的堆分析,所以我在这里无能为力。但是如果这些对象真的泄漏了,这将是一个巨大的错误,所以你可以考虑把你的问题发布到一个角度的DEV列表中。