Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc AngularJS+;更改路由时ASP.Net MVC ng重复内存问题_Asp.net Mvc_Angularjs_Routing_Angularjs Ng Repeat_Ng Repeat - Fatal编程技术网

Asp.net mvc AngularJS+;更改路由时ASP.Net MVC ng重复内存问题

Asp.net mvc AngularJS+;更改路由时ASP.Net MVC ng重复内存问题,asp.net-mvc,angularjs,routing,angularjs-ng-repeat,ng-repeat,Asp.net Mvc,Angularjs,Routing,Angularjs Ng Repeat,Ng Repeat,我正在使用Angular(1.1.5)作为ASP.NETMVC3项目的前端,在使用ng repeat时,浏览器内存消耗出现问题 看起来,当路由发生更改且ng view标记更新时,使用ng repeat时,旧dom元素不会被垃圾收集 设置如下: _layout.cshtml页面,包含、脚本、css和带有angular应用程序链接的标题 index.cshtml部分使用布局页面,并包含一个标记 index.html,包含带有ng repeat的我的内容 index.html: <div ng

我正在使用Angular(1.1.5)作为ASP.NETMVC3项目的前端,在使用ng repeat时,浏览器内存消耗出现问题

看起来,当路由发生更改且ng view标记更新时,使用ng repeat时,旧dom元素不会被垃圾收集

设置如下:

  • _layout.cshtml页面,包含
    、脚本、css和带有angular应用程序链接的标题
  • index.cshtml部分使用布局页面,并包含一个
    标记
  • index.html,包含带有ng repeat的我的内容

    index.html:

    <div ng-controller="MyCtrl">
        <div ng-repeat="item in items">
            <p>Blah Foo Bar lorem ipsum gack</p>
            <hr />
        </div>
    </div>
    
    因此,反复单击标题中的链接(由于未定义特定的路由,因此始终会产生路由更改),然后调用垃圾收集器会在chrome timeline中产生以下结果:

    正如您所看到的,内存基线不会返回到初始值,并且这会随着路由更改的增加而继续增加。此外,dom元素计数也在继续增加。查看堆快照,这些快照已分离,但仍然挂起

    删除ng repeat会导致dom计数重置每个路由更改

    有人知道为什么吗?如何防止这些元素四处游荡


    更新:我在VS2010中创建了一个新的MVC3项目,但没有这个问题。在VS2012中创建了一个新的MVC3项目,并完成了:/

    您使用的是哪个版本的AngularJS?该框架有一个漏洞,但是它只适用于嵌套的ng重复。1.1.5,也尝试了1.2rc2,但也是一样的。我已经创建了一个新的MVC3项目,在重新创建这个问题时遇到了困难,所以我想我可能在现有项目中遗漏了一些其他内容。
    var app = angular.module('MyApp', ['MyApp.content'])
        .config(['$routeProvider', function($routeProvider) {
            $routeProvider
                .otherwise({ templateUrl: '/index.html' });
        }]);
    
    angular.module('MyApp.content', []);
    
    angular.module('MyApp.content')
        .controller("MyCtrl", ['$scope', function ($scope) {
                $scope.items = [{}, {}];
            }]);