【发布时间】:2015-11-20 09:48:49
【问题描述】:
我可以访问$controllerProvider,但无法通过以下方法访问$controller
angular.module(MODULE_NAME, ['common'])
.config(['$routeProvider','$controllerProvider',
function($routeProvider, $controllerProvider) {
console.log($controllerProvider);//defined
console.log($controller);//undefined
}]);
如果我使用 $controller 作为依赖注入,它会给
Unknown provider: $controller
但我需要访问它,我该怎么做
编辑
我需要这个,因为我想检查我的控制器是否存在。这是post,我正在使用此代码
try {
$controller(controllerName);
listControlerName = MODULE_NAME+'ListController';
} catch (error) {
listControlerName = 'CommonListController';
}
上下文
我正在创建一个项目的架构。我的项目结构如下。
- 我有一个 COMMON 模块。使用 ListController、EditController、ViewController
- 我还有一些其他模块,如 MOD1、MOD2 等,带有 MOD1ListController、MOD1EditController、MOD1ViewController 等。
- 那些特定于模块的控制器从通用模块扩展相应的控制器。
现在我的计划是在需要开发一个新模块(MODX)的同时,如果有一些额外的功能,那么只有开发人员会通过继承通用的 ListController 为该模块创建一个新的 MODXListController。否则他们不需要创造任何东西。
因此系统将检查该模块是否包含 MODXListController。如果没有,那么系统将使用 Common ListController。
我不想创建一个 MODXListController 继承公共 ListController 但不做任何额外的改变。因为我有很多模块,将近 25 个,而且大部分都共享相同的功能。
【问题讨论】:
-
你不能从你的配置访问
$controller。 -
请提供上下文,为什么控制器是否存在是未知的。有更好的方法来做你想做的事,当然不是那样的。
-
@estus 我已经更新了上下文。
-
从抽象父级扩展零更改是 OOP 中的常见做法,不应避免。特别是如果替代方案不可行(try-catch $controller 很糟糕,但其他方案更糟)。 Angular 控制器继承有很多很好的方法。
标签: angularjs