javascript - 基于路由参数动态注入(inject)特定工厂由于某种原因失败

标签 javascript angularjs dependency-injection angularjs-routing

我想根据路由参数动态地将工厂注入(inject)到我的 Angular Controller 中。这是我的路线配置:

$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注入(inject)tableController ,等等。

不幸的是,这个配置不起作用——我得到一个 Unknown provider: employeeFactory r 中的错误功能。

另一方面,我可以传递 $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使用路由配置进行注入(inject),而不是这种丑陋的解决方法。

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

最佳答案

您显然使用了注入(inject)到 config block 中的 $injector ,它与注入(inject)到其他地方的 $injector 不同。前者acts on service providers ,后者acts on service instances .

应该是

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

关于javascript - 基于路由参数动态注入(inject)特定工厂由于某种原因失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980273/

相关文章:

javascript - 具有参数的函数上的clearTimeout

javascript - Angularjs 表单提交和导航到其他页面

javascript - 刷新时获取json数据

c# - 实现多个接口(interface)的类如何使用RegisterType?

javascript - 页面崩溃(可能是由于多维数组?)

javascript - 使用 jQuery 应用 if 和 else 条件添加和删除类

angularjs - 集成 Hive 和 AngularJS?

javascript - $urlRouterProvider.when() 内的 Angular-UI Resolve Promise 对象

java - 编写自己的依赖注入(inject)

c# - Unity IoC 解析并注入(inject)一组实现通用接口(interface)的类