在AngularJS中销毁控制器后删除悬挂的对象

时间:2017-06-08 12:09:21

标签: angularjs object memory-leaks

我在使用ng-include和angular-routes更改页面的Web应用程序上工作。 正如我在标题中所说,问题是在页面被更改并且页面的控制器被破坏之后,一些使用过的对象仍留在浏览器内存中。在下面的示例中,我提供了我们使用的控制器和对象的简化版本。这是我们的开发团队编写控制器的方式:

在使用angular-routes改变由MyController控制的页面之后,XController对象仍然挂在内存中。但是,当使用ng-include更改页面时,将清除内存,并从内存中删除XController对象。

controllers.controller(MyController, function () {

    function XController() {
        console.log("In controller");
    }

    var xController = new XController();

    /** return controller instance */
    return xController;

});

PS:我们在控制器中使用了这种类型的编写代码,因为在我们使用的代码中的某处:

/** attach logging mechanism */
LoggerAspect.applyTo(xController);

编辑: @toskv LoggerAspect是我们跟踪模块中的一项服务。

LoggerAspect的部分代码

//An aspect contains advices and the target to apply the advices to.
   var aspect = new Aspect.Aspect([beforeAdvice, afterReturning, afterThrowing])
   return {
        /**
         * Applies the aspect to the passed object
         */
        applyTo: aspect.applyTo.bind(aspect)
   };

Aspect是工厂,Aspect是工厂内的一个功能。

我还尝试从Controller中删除LoggerAspect,并且XController对象仍然挂在内存中。

0 个答案:

没有答案