【问题标题】:Dynamically injecting a specific factory based on route parameter fails for some reason由于某种原因,基于路由参数动态注入特定工厂失败
【发布时间】:2015-10-06 21:43:03
【问题描述】:

我想根据路由参数将工厂动态注入到我的 Angular 控制器中。这是我的路线配置:

$routeProvider
.when("/tables/:table",
{
    controller: "tableController",
    templateUrl: "/app/views/table.html",
    resolve: {
        "factory": function r($route) {
            return $injector.get($route.current.params.table + "Factory"); // Error!
        }
    }
})

例如,当路由是tables/employee时,我想将employeeFactory注入tableController,等等。

很遗憾,此配置不起作用 - 我在 r 函数中收到 Unknown provider: employeeFactory 错误。

另一方面,我可以将$injector 服务直接传递给tableController 并在那里成功解析employeeFactory

(function (angular) {
    var tableController = function ($routeParams, $injector) {
        // employeeFactory resolves successfully here!
        var factory = $injector.get($routeParams.table + "Factory");
    };

    angular.module("appModule").controller("tableController", tableController);
})(angular);

但是,我不喜欢这种方法,因为它遵循service locator anti-pattern。我真的很想使用路由配置注入factory,而不是这种丑陋的解决方法。

那么,为什么 Angular 在使用 $injector.get()resolve 时会抛出错误,但成功解析了 tableController 内部的工厂?我正在使用 Angular 1.4.4。

【问题讨论】:

  • 你能把剩下的配置块贴出来吗?

标签: javascript angularjs dependency-injection angularjs-routing


【解决方案1】:

您显然使用了注入到config 块中的$injector,它与在其他任何地方注入的$injector 不同。前者acts on service providers,后者acts on service instances

应该是

    "factory": function r($route, $injector) {
        return $injector.get($route.current.params.table + "Factory");
    }

【讨论】:

  • 哇,有帮助!不知道那个。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多