一尘不染

将$ http注入配置或提供程序以使其运行

angularjs

我在我的angular应用程序中使用angular-route-segment,试图从json feed配置这些段。

我对此有问题,因为我不知道如何注入$httpapp.config函数。这失败了Unknown provider: $http

myApp.config(["$http", "$routeSegmentProvider", function ($http, $routeSegmentProvider) {
   /* setup navigation here calling $routeSegmentProvider.when a number of times */
}

因此,而不是注入$ HTTP到的config,我也尝试注入$routeSegmentProvidermyApp.run

myApp.run(["$http", "$routeSegment", function($http, $routeSegment) {
    /* can use $http here to get data, but $routeSegment is not the same here */
    /* $routeSegment does not have the when setup method */
}]);

我也试过

myApp.run(["$http", "$routeSegmentProvider", function($http, $routeSegmentProvider)

但我明白了 Unknown provider: $routeSegmentProviderProvider <- $routeSegmentProvider


阅读 220

收藏
2020-07-04

共1个答案

一尘不染

提供程序只能在“配置”阶段注入,而不能在“运行”阶段注入。相反,诸如$ http之类的服务尚未在“配置”阶段初始化,而仅在“运行”阶段可用。

解决此问题的一个小技巧是在父函数作用域中定义一个变量,以便“ config”和“ run”块都可以访问它:

var routeSegmentProvider = null;

myApp.config(["$routeSegmentProvider", function ($routeSegmentProvider) {
    routeSegmentProvider = $routeSegmentProvider;
}]);

myApp.run(["$http", function($http) {
  // access $http and routeSegmentProvider here
}]);

我不确定您是否会在尝试运行阶段尝试调用$
routeSegmentProvider.setup()时遇到问题,因为我没有尝试过。过去,我可以使用相同的技术向$
httpProvider注册依赖于某些自定义服务的http响应拦截器。

2020-07-04