我在我的angular应用程序中使用angular-route-segment,试图从json feed配置这些段。
我对此有问题,因为我不知道如何注入$http该app.config函数。这失败了Unknown provider: $http
$http
app.config
Unknown provider: $http
myApp.config(["$http", "$routeSegmentProvider", function ($http, $routeSegmentProvider) { /* setup navigation here calling $routeSegmentProvider.when a number of times */ }
因此,而不是注入$ HTTP到的config,我也尝试注入$routeSegmentProvider到myApp.run
config
$routeSegmentProvider
myApp.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
Unknown provider: $routeSegmentProviderProvider <- $routeSegmentProvider
提供程序只能在“配置”阶段注入,而不能在“运行”阶段注入。相反,诸如$ 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响应拦截器。