AngularJs 1.3 проверяет, существует ли контроллер

0

У меня есть следующий код в большом Угловом проекте:

$stateProvider.state('my-app', {
    url : '/',
    views: {
        'content@': {
            templateUrl: '/?page=/home',
            controller: 'HomeController'
        }
    }
});

Я знаю, что я могу удалить контроллер, используя delete element['views']['content@']['controller']; и init с element позже, но как я могу проверить, существует ли HomeController? После дня исследования. В Angular нет рабочего решения.

  • 0
    просто используйте console.log ('invoking HomeController'); в вашем домашнем контроллере, когда бы он ни вызывал, он будет принтером в журнале вашего браузера.
  • 0
    Я хочу проверить, существует ли он, потому что некоторые контроллеры не будут существовать все же.
Теги:

1 ответ

0

Вы не должны удалять контроллеры. Это должно быть сделано угловым.

Но вы можете установить некоторую введенную переменную службы на создание контроллера и очистить ее "от уничтожения". Т.е. делать что-то вроде:

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) {
   ...
}

потому что любой контроллер является частью его области - каждый контроллер "прикреплен" к своей области действия по имени.

Но еще раз: никто не должен удалять контроллеры, кроме угловых;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню