У меня есть следующий код в большом Угловом проекте:
$stateProvider.state('my-app', {
url : '/',
views: {
'content@': {
templateUrl: '/?page=/home',
controller: 'HomeController'
}
}
});
Я знаю, что я могу удалить контроллер, используя delete element['views']['content@']['controller'];
и init с element
позже, но как я могу проверить, существует ли HomeController
? После дня исследования. В Angular нет рабочего решения.
Вы не должны удалять контроллеры. Это должно быть сделано угловым.
Но вы можете установить некоторую введенную переменную службы на создание контроллера и очистить ее "от уничтожения". Т.е. делать что-то вроде:
angular
.module('something')
.controller('HomeController', HomeController);
HomeController.$inject = ['$scope', 'myGlobalService'];
function HomeController($scope, myGlobalService) {
myGlobalService.isHomeControllerPresent = true;
$scope.$on("$destroy", function() {
myGlobalService.isHomeControllerPresent = undefined;
});
}
Но это скорее взлом, чем "Угловой стиль".
Если у вас есть доступ к $ scope, и вы знаете имя контроллера (т. Е. Ng-controller = "homeCtrl как HomeController" или controllerAs: 'homeCtrl'), тогда вы можете просто проверить:
if ($scope.homeCtrl) {
...
}
потому что любой контроллер является частью его области - каждый контроллер "прикреплен" к своей области действия по имени.
Но еще раз: никто не должен удалять контроллеры, кроме угловых;)