Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
AngularJS中$onDestroy方法中的停止事件_Angularjs_Angularjs Components - Fatal编程技术网

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

AngularJS中$onDestroy方法中的停止事件,angularjs,angularjs-components,Angularjs,Angularjs Components,我正在AngularJS中开发一个相当大的应用程序,为了避免内存泄漏,我们在$onDestroy方法中实现了内存释放,问题是有一些变量变得未定义,但是,ng change事件不断来自HTML,我有一些错误。有没有办法断开所有HTML与控制器的连接?或者至少停止所有来自前端的事件?我在AngularJS 1.6中工作 这是我如何定义组件的一个示例: function requestListController($uibModal, urlRest, $stateParams, $state, ui

我正在AngularJS中开发一个相当大的应用程序,为了避免内存泄漏,我们在
$onDestroy
方法中实现了内存释放,问题是有一些变量变得
未定义
,但是,
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',
控制器:requestListController
});

这是我的组件的结构。

您首先需要查看订阅了多少个事件。然后在destroy中,您可以取消订阅所有这些活动。有时,我们还使用必须销毁的指令。或者这些指令中有一些需要清理的逻辑。此外,如果您订阅了根作用域上的任何事件,则即使本地作用域已被销毁,它仍将有效。

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

我猜您误解了
onDestroy
事件。它主要用于删除(…)上的
$rootScope.$on的超时、间隔或事件

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

如果您有一个具有一个作用域或类似功能的大型应用程序,则应使用
ng If
删除不应显示的部分。如果
ng if
的变量为false,这将删除DOM元素和所有观察者


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

我猜您误解了onDestroy事件。它主要用于删除(…)
上的
$rootScope.$on的超时、间隔或事件

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

如果您有一个具有一个作用域或类似功能的大型应用程序,则应使用
ng If
删除不应显示的部分。如果
ng if
的变量为false,这将删除DOM元素和所有观察者


如果您没有合适的代码,没有人能真正帮助您,只是猜测您的问题可能是什么。

如果您提供问题的详细信息,这会有所帮助。断开HTML与控制器的连接?控制器始终连接到其HTML。改变事件不会停止。它们可以被忽略,但它们不会停止,直到链接的作用域被销毁。这个例子应该是完整的。应该有足够的信息,以便其他人能够重现问题。如果使用AngularJS指令将事件处理程序正确地添加到DOM中,那么当作用域被销毁时,它们将被释放。内存泄漏来自其他地方。请尝试
ctrl.requestListGridOptions.data.length=0
。这将在不破坏引用的情况下清空数组。如果您提供问题的详细信息,这将有所帮助。断开HTML与控制器的连接?控制器始终连接到其HTML。改变事件不会停止。它们可以被忽略,但它们不会停止,直到链接的作用域被销毁。这个例子应该是完整的。应该有足够的信息,以便其他人能够重现问题。如果使用AngularJS指令将事件处理程序正确地添加到DOM中,那么当作用域被销毁时,它们将被释放。内存泄漏来自其他地方。请尝试
ctrl.requestListGridOptions.data.length=0
。这将在不破坏引用的情况下清空数组。您好,可能正如您所说,我误解了$onDestroy,问题是作用域不会自动销毁它们自己,而且我有一个相当大的内存泄漏。我在组件级别工作,我从不使用rootScope、watcher、timer,我只注入帮助我管理系统的服务,注入的服务能阻止范围的破坏吗?谢谢你的帮助。除了你的应用程序结构之外,没有什么能阻止作用域的破坏。只剩下一些$rootScope观察者等等,但他们不会阻止破坏。如何实现组件?你有一个大的单一文件,还是有多个包含不同组件的站点?对于一个好的结构,您需要使用ng view或ng if来删除DOM元素和绑定的控制器。您好,可能正如您所说,我误解了$onDestroy,问题是作用域不会自动销毁自己,而且我有一个相当大的内存泄漏。我在组件级别工作,我从不使用rootScope、watcher、timer,我只注入帮助我管理系统的服务,注入的服务能阻止范围的破坏吗?谢谢你的帮助。除了你的应用程序结构之外,没有什么能阻止作用域的破坏。只剩下一些$rootScope观察者等等,但他们不会阻止破坏。如何实现组件?你有一个大的单一文件,还是有多个包含不同组件的站点?为了获得良好的结构,需要使用ng view或ng if来删除DOM元素和绑定的控制器。