javascript - AngularJS - 将 $factory 注入控制器
问题描述
我有多个注册的工厂,比如和Circle
,以及一个名为 的控制器。在内部,我正在尝试使用其字符串表示来检索其中一个工厂,就像我可以使用.Square
Triangle
ShapeController
ShapeController
$controller('ControllerName', {...})
var ShapeController = function($scope, $routeParams, $factory) {
var shape = $factory('Circle', []); // shape is an instance of the Circle factory
....
}
我希望我可以注射$factory
,但我一直在注射Error: [$injector:unpr] Unknown provider: $factoryProvider <- $factory <- ShapeController
。有什么 api 或某种方法可以检索工厂吗?
解决方案
不,你弄错了。实际上,在 angularjs 框架中没有任何东西被称为$factory
内置服务/提供者。你提到的东西$controller
,它是一个由 angularjs 创建的特殊提供程序,用于实例化具有一些本地的控制器(在那里你也可以模拟依赖项)。
当您想获取特定依赖项的实例时,您可以将其提取出来injector
(这就像 DI 系统的 DI 容器),您应该$injector
在控制器工厂函数中注入依赖项并使用get
方法来检索特定依赖项。
var ShapeController = function($scope, $routeParams, $injector) {
var shape = $injector.get('Circle');
....
}
推荐阅读
- bash - 将完整脚本输出到变量
- javascript - React 中的两个 onPointerOver 事件冲突
- python-3.x - 无法为不使用 PEP 517 的 fbprophet 构建轮子
- linux - AWK 打印子网 0.69.100.in-abc.def
- r - R:有效地将多个数据集组合在一起
- c# - 根据来自多个 TextBoxes MVVM 的值过滤 WPF DataGrid (DataTable)
- visual-studio - GlobalSection ExtensibilityGlobals 在 .sln 文件中重复
- php - 加入两个数组
- java - 从 PDF 缩放 PDDocument
- .net-core - 在 Azure Pipelines 构建中命名生成的 ZIP 存档?