我創建了一個可以顯示多頁項目的列表模塊。我正在使用嵌套的ng-repeat遍歷頁面和每個頁面上的項目。不過,我注意到當我不斷刷新列表並加載新頁面和項目時,DOM節點在Chrome時間線工具中不斷增加,內存使用也在增加(我確保在錄製過程中單擊了垃圾收集按鈕,因此必須東西泄漏): 角度1.5.x ng重複內存泄漏
我使用的角度1.5.5和requireJS,我聽說以前有內存泄漏NG-重複,但已經得到了修復1.4所支持代碼很簡單,我沒有在代碼中註冊任何DOM處理程序,我一直在這個問題上徘徊了一個星期,仍然無法弄清原因,現在我非常絕望,並且非常感謝幫助。
我的代碼文件的結構是這樣的:
list-container
|___module.js
|
|___controllers
| |____list-container.js
|
|___directives
| |____list-container.js
|
|___views
|____directive-list-container.html
下面是代碼:
module.js
define([
'angular',
], function (angular) {
'use strict';
return angular.module('ui.listContainer', []);
});
列表container.js(指令)
define([
'angular',
'../module',
'../controllers/list-container'
], function (angular, module) {
'use strict';
return angular
.module('ui.listContainer')
.directive('listContainer', function() {
return {
replace: true,
restrict: 'E',
templateUrl: '/modules/list-container/views/directive-list-container.html',
bindToController: {},
scope: {},
controllerAs: 'listVm',
controller: 'listContainerController'
};
});
});
list-container.js(co ntroller)
define([
'angular',
'../module'
], function (angular, module) {
'use strict';
angular.module('ui.listContainer').controller('listContainerController', ['$scope', function ($scope) {
var listVm = this;
$scope.refreshPage = function() {
if (listVm.list) {
listVm.list = null; //Clear the data
}
listVm.list = {};
listVm.list.pages = feedData(); //Load mock data
};
function feedData() {
var pages = [];
for(var i = 0; i < 10; i++) {
pages.push(new PageMock());
}
return pages;
}
function PageMock() {
this.items = [];
for (var i = 0; i < 50; i++) {
this.items.push(new ItemMock());
}
}
function ItemMock() {
this.id = Math.floor(Math.random() * 10000000);
}
}]);
});
指令一覽container.html(視圖)
<div class="list-container row">
<div id="list-container-pages">
<div class="list-container-pages row">
<div ng-click="refreshPage()">Refresh Page</div>
<div class="list-container-page row" ng-repeat="page in listVm.list.pages track by $index">
<div class="row" ng-repeat="listItem in page.items track by listItem.id">
<span class="col-md-12">{{listItem.id}}</span>
</div>
</div>
</div>
</div>
</div>
我創建了一個plunker模仿我有上述代碼中,但是它不泄漏在所有在plunker示例,其是超級怪異的。 Plunker Example
該帖子引用了角度1.4.something,並且被認爲是固定的。雖然我似乎無法在實際的回購中找到提交,並且我在我所維護的某些角度爲1.5.8的代碼中看到了相同的行爲。 – hakon
我正在使用angular 1.5,並且這種漸進式內存增加的行爲仍然存在。我最終定期定期刷新頁面作爲解決方法。 – user2217057
使用angularjs 1.6.4,這仍然是一個工作周圍添加「跟蹤$索引」,如果你有一個ng重複(不適用於過濾器),並且每小時刷新一次頁面也可以幫助。 – AKMorris