停止AngularJS中$ onDestroy方法中的事件

时间:2018-07-30 08:06:53

标签: angularjs angularjs-components

我正在AngularJS中开发一个非常大的应用程序,为避免内存泄漏,我们正在$onDestroy方法中实现内存释放,问题是有些变量变成了undefinedng-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
});

这少了我的组件的结构。

2 个答案:

答案 0 :(得分:2)

我猜您误解了onDestroy事件。主要是为了删除$rootScope.$on(...)的超时,时间间隔或事件。

ng-change事件绑定到范围。这意味着如果删除范围,它将自动销毁。因此整个范围不会被破坏,您还有另一个问题。

如果您的一个大型应用程序具有一个范围或类似的范围,则应使用ng-if删除不应显示的部分。如果ng-if的变量为false,这将删除DOM元素以及所有观察者。

没有任何合适的代码,没有人能真正为您提供帮助,只是猜测您的问题可能是什么。

答案 1 :(得分:0)

您首先需要查看已订阅多少个事件。然后,在销毁操作中,您可以取消订阅所有这些事件。有时,我们还会使用必须销毁的指令。或者这些指令中有一些逻辑需要清除。另外,如果您已订阅了根作用域上的任何事件,则即使本地作用域已被破坏,事件也将保留。