我在一个大型Angular项目中有以下代码:
$stateProvider.state('my-app', {
url : '/',
views: {
'content@': {
templateUrl: '/?page=/home',
controller: 'HomeController'
}
}
});
我知道我可以使用delete element['views']['content@']['controller'];
删除控制器,然后使用element
删除控制器,但如何检查HomeController
是否存在?经过一天的研究。 Angular似乎没有工作解决方案。
答案 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) {
...
}
因为任何控制器都是其范围的一部分 - 每个控制器都按名称“附加”到其范围。
但是再一次:没有人应该删除除角度以外的控制器;)