【发布时间】:2015-07-23 12:04:57
【问题描述】:
我想从 app.config 中调用我的服务。
在搜索此内容时,我发现 this question 带有我尝试遵循的解决方案(不是已接受的答案,但下面的解决方案标题为“将您的服务设置为自定义 AngularJS 提供程序")
但是,使用该解决方案以及建议的替代方案时,当我尝试从 app.config 中调用服务时遇到问题(似乎根本没有调用该服务)。我是 angular 和 javascript 的新手,并不知道如何正确调试(我正在使用 firebug)。我希望你能帮助我一些指示和可能的解决方案。
当前代码(尝试从链接的问题中实现“可能的替代方案”:
angular.module('myApp', [
'ngRoute',
])
.config(['$routeProvider', '$locationProvider', '$provide', function($routeProvider, $locationProvider, $provide) {
$provide.service('RoutingService',function($routeParams){
var name = $routeParams.name;
if (name == '') {name = 'testfile'}
var routeDef = {};
routeDef.templateUrl = 'pages/' + name + '/' + name + '.html';
routeDef.controller = name + 'Ctrl';
return routeDef;
})
//Here i would like to get a hold of the returned routeDef object defined above.
$routeProvider.when('/name:', {
templateUrl: RoutingService.templateUrl,
controller: RoutingService.controller
});
我之前的尝试是通过提供者这样声明服务:
var ServiceModule = angular.module('RoutingServiceModule', []);
ServiceModule.provider('routingService', function routingServiceProvider(){
this.$get = [function RoutingServiceFactory(){
return new RoutingService();
}]
});
function RoutingService(){
this.getUrlAndControllerFromRouteParams = function($routeParams){
var name = $routeParams.name;
var routeDef = {};
routeDef.templateUrl = 'pages/' + name + '/' + name + '.html';
routeDef.controller = name + 'Ctrl';
return routeDef;
}
}
并尝试像我通常在控制器中调用服务一样调用它(当然,在将RoutingServiceModel 添加到myApp 的依赖项之后)。在这两种情况下,当我导航到我的视图时,templateUrl 和控制器都没有设置,所以我想我缺少一些依赖项,或者没有正确调用服务。
有什么想法吗?
【问题讨论】:
-
这里的答案:stackoverflow.com/questions/16828287/… 非常详细地回答了我的问题。理论上,我可以在应用程序的
config阶段使用提供程序,但在run阶段之前,我无法访问任何服务实例(就像我尝试使用$routeParams)。
标签: javascript html angularjs routes