首页 > 解决方案 > AngularJS - 将 $factory 注入控制器

问题描述

我有多个注册的工厂,比如和Circle,以及一个名为 的控制器。在内部,我正在尝试使用其字符串表示来检索其中一个工厂,就像我可以使用.SquareTriangleShapeControllerShapeController$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 或某种方法可以检索工厂吗?

标签: javascriptangularjsdependency-injectionangular-controller

解决方案


不,你弄错了。实际上,在 angularjs 框架中没有任何东西被称为$factory内置服务/提供者。你提到的东西$controller,它是一个由 angularjs 创建的特殊提供程序,用于实例化具有一些本地的控制器(在那里你也可以模拟依赖项)。

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

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

推荐阅读