AngularJs 1.3检查控制器是否存在

时间:2016-04-19 13:55:00

标签: angularjs angular-controller

我在一个大型Angular项目中有以下代码:

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

我知道我可以使用delete element['views']['content@']['controller'];删除控制器,然后使用element删除控制器,但如何检查HomeController是否存在?经过一天的研究。 Angular似乎没有工作解决方案。

1 个答案:

答案 0 :(得分:0)

您不应删除控制器。这应该通过角度来完成。

但是你可以在控制器创建时设置一些注入的服务变量并在'destroy'上清除它。即做类似的事情:

angular
  .module('something')
  .controller('HomeController', HomeController);

HomeController.$inject = ['$scope', 'myGlobalService'];
function HomeController($scope, myGlobalService) {

  myGlobalService.isHomeControllerPresent = true;

  $scope.$on("$destroy", function() {
    myGlobalService.isHomeControllerPresent = undefined;
  });
}

但它比'Angular style'更像是黑客攻击。

如果您有权访问$ scope并且您知道控制器名称(即 ng-controller =“homeCtrl as HomeController” controllerAs:'homeCtrl'),那么您可以请检查:

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

因为任何控制器都是其范围的一部分 - 每个控制器都按名称“附加”到其范围。

但是再一次:没有人应该删除除角度以外的控制器;)