我的设置与此处找到的帖子类似http://ify.io/lazy-loading-in-angularjs/ http://ify.io/lazy-loading-in-angularjs/处理 Angular 中我的应用程序的各种组件的延迟加载。
我遇到的问题是,加载的组件越多,应用程序的内存占用量就会增加(我知道,这是显而易见的)。有没有一种干净的方法来“卸载”或“销毁”已延迟加载的角度服务/控制器/指令/等?
简单例子(供参考)
app.js
var app = angular.module('parentApp', ['ui.router']).config(function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
var app = angular.module('app', ['ui.router'])
.config(function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
app.lazy = {
controller: $controllerProvider.register,
directive: $compileProvider.directive,
filter: $filterProvider.register,
factory: $provide.factory,
service: $provide.service
};
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.state('lazyLoad', {
url: '/lazyLoad',
templateUrl: 'views/lazyLoad.html',
controller: 'lazyLoadCtrl',
resolve: {
promiseObj: function ($q, $rootScope) {
var deferred = $q.defer();
var dependencies = [
'scripts/controllers/lazyLoad.js'
];
$script(dependencies, function () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
return deferred.promise;
}
}
});
});
和延迟加载控制器lazyLoad.js
angular.module('app')
.lazy.controller('lazyLoadCtrl', function($scope){
$scope.greeting = 'hi there';
}
);
如果用户导航到#/lazyLoad
,应用程序将加载到控制器(和视图)中,以及它被告知需要的其他内容。但是当用户离开时#/lazyload
,我希望所有先前加载的组件都被卸载/销毁。
我如何完全取消注册/销毁/卸载(不确定这里正确的动词是什么......)“lazyLoadCtrl”控制器。如上所述,理想情况下,一旦不再需要延迟加载的控制器、指令、过滤器、工厂和服务,我希望能够卸载它们。
Thanks!