2016-04-19 3 views
0

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

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

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

+0

просто использовать console.log ('вызова HomeController'); в вашем домашнем контроллере, когда он запускает контроллер, это будет принтер в вашем браузере. –

+0

Я хочу проверить, существует ли это, потому что некоторые контроллеры не будут существовать. –

ответ

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; 
    }); 
} 

Но это скорее взлом, чем «Угловой стиль».

Если у вас есть доступ к $ объему и вы знаете имя контроллера (т.е. нг-контроллер = "homeCtrl в HomeController" или controllerAs: 'homeCtrl'), то вы можете просто проверить:

if ($scope.homeCtrl) { 
    ... 
} 

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

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

Смежные вопросы