我想根据路由参数动态地将工厂注入(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/