AngularJS-将$ factory注入控制器

时间:2018-07-10 18:42:53

标签: javascript angularjs dependency-injection angular-controller

我有多个工厂注册,例如CircleSquareTriangle,还有一个名为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或某种方式可以检索工厂吗?

1 个答案:

答案 0 :(得分:1)

不,您错了。实际上,angularjs框架中没有所谓的$factory内置服务/提供程序。您提到的$controller是一个特殊的提供程序,它由angularjs创建,用于使用一些本地实例化控制器(您也可以模拟依赖项)。

当您要获取特定依赖项的实例时,可以将其从injector中提取出来(这就像DI系统的DI容器一样),您应该在控制器工厂内部注入$injector依赖项函数并使用get方法来检索特定的依赖项。

var ShapeController = function($scope, $routeParams, $injector) {
  var shape = $injector.get('Circle');
  ....
}