【发布时间】:2018-07-30 08:06:53
【问题描述】:
我正在 AngularJS 中开发一个相当大的应用程序,为了避免内存泄漏,我们在 $onDestroy 方法中实现内存释放,问题是有些变量变成了 undefined 但是,ng-change事件不断来自 HTML,我有一些错误。有什么方法可以将所有 HTML 与控制器断开连接?或者至少停止来自前端的所有事件?我正在使用 AngularJS 1.6。
这是我如何定义组件的示例:
function requestListController($uibModal, urlRest, $stateParams, $state, uiGridConstants, $filter, httpService) {
var ctrl = this;
ctrl.$onInit= function() {
// ALL DATA INITIALIZATION
ctrl.requestListGridOptions.data = [];
// GETTING EXTERNAL DATA
httpService.get(url, true)
.then(function(response){
console.log("initRequestList - data.RequestListTO : " , response.RequestListTO);
angular.copy(response.RequestListTO.requests, ctrl.requestListGridOptions.data);
}) .catch(function onError(response) {
// Handle error
var status = response.status;
console.log("initRequestList - error : " + status);
});
};
//////////////////////////////
// //
// on$Destroy method //
// //
//////////////////////////////
ctrl.$onDestroy = function() {
ctrl.status=undefined;
ctrl.requestListGridOptions=undefined;
};
// OTHER METHODS
};
//Inject dependencies
requestListController.$inject = [ '$uibModal', 'urlRest', '$stateParams', '$state', 'uiGridConstants', '$filter', 'httpService'];
pomeApp.component('requestList', {
templateUrl: 'request/requestList/requestList.template.html',
controller: requestListController
});
这更像是我的组件的结构。
【问题讨论】:
-
如果您提供问题的Minimal, Complete, and Verifiable example 会有所帮助。断开 HTML 与控制器的连接?控制器总是连接到它们的 HTML。 ng-change 事件不会停止。它们可以被忽略,但在链接作用域被销毁之前它们不会停止。
-
示例应该是完整的。应该有足够的信息,以便其他人可以重现该问题。如果使用 AngularJS 指令将事件处理程序正确添加到 DOM,它们将在作用域被销毁时释放。内存泄漏来自其他地方。
-
试试
ctrl.requestListGridOptions.data.length=0。这将清空数组而不破坏引用。
标签: angularjs angularjs-components