我有多个工厂注册,例如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或某种方式可以检索工厂吗?
答案 0 :(得分:1)
不,您错了。实际上,angularjs框架中没有所谓的$factory
内置服务/提供程序。您提到的$controller
是一个特殊的提供程序,它由angularjs创建,用于使用一些本地实例化控制器(您也可以模拟依赖项)。
当您要获取特定依赖项的实例时,可以将其从injector
中提取出来(这就像DI系统的DI容器一样),您应该在控制器工厂内部注入$injector
依赖项函数并使用get
方法来检索特定的依赖项。
var ShapeController = function($scope, $routeParams, $injector) {
var shape = $injector.get('Circle');
....
}