разгрузка / уничтожение угловатых лениво загруженных компонентов
У меня есть настройка, которая похожа на пост, найденный здесь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'. Как указано выше, в идеале я хотел бы иметь возможность выгружать лениво загруженные контроллеры, директивы, фильтры, фабрики и службы, когда они больше не нужны.
Спасибо!