AngularJS:如何通过控制器中的服务方法传递id
AngularJS: How to pass the id through a service method in the controller
我正在开发一个AngularJS web应用程序。我有以下路由配置:
$routeProvider.
when("/drivers", {templateUrl: "partials/drivers.html", controller: "driversController"}).
when("/drivers/:id",{templateUrl: "partials/driver.html", controller: "driverController"}).
otherwise({redirectTo: '/drivers'});
}]);
为了传递JSON的ID,我在service.js文件
中使用以下方法F1API.getDriverDetails = function(id) {
return $http({
method: 'JSONP',
url: 'http://localhost:8000/app/data/' + id + '/driverStandings.json?callback=JSON_CALLBACK'
});
}
F1API.getDriverRaces = function(id) {
return $http({
method: 'JSONP',
url: 'http://localhost:8000/app/data/' + id + '/results.json?callback=JSON_CALLBACK'
});
}
return F1API;
});
但现在我被困住了。我需要这个方法在一个对象中分配一个车手和他的比赛。但我需要id,所以我在controller.js
/* Driver controller */
controller('driverController', function($scope, $routeParams, F1APIservice) {
$scope.id = $routeParams.id;
$scope.races = [];
$scope.driver = null;
F1APIservice.getDriverDetails(id).success(function(response){
$scope.driver = response.MRData.StandingsTable[0].DriverStandings[0];
});
F1APIservice.getDriverRaces(id).success(function(response){
$scope.races = response.MRData.RaceTable.Races;
});
});
Id是未知的,而我建立我的web应用程序。我做错了什么?
在您的控制器中,您将$routeParams.id
分配给$scope.id
,但随后您仅使用id
调用getDriverDetails
和getDriverRaces
,这是未定义的。您需要像这样调用它们:getDriverDetails( $scope.id )
.
更好的方法是将控制器与$routeParams
解耦。要实现这一点,使用$routeProvider
的resolve
功能:
$routeProvider.
when("/drivers/:id", {
templateUrl: "partials/driver.html",
controller: "driverController",
resolve: {
'id': function($route) {
return $route.current.params.id);
}
}
})
使用上面的代码,Angular将使id
对你的控制器可用:
controller('driverController', function($scope, id, F1APIservice)
由于resolve
是承诺感知的,一种替代方法甚至可以在resolve:
$routeProvider.
when("/drivers/:id", {
templateUrl: "partials/driver.html",
controller: "driverController",
resolve: {
'driver': function($route, F1APIservice) {
return F1APIservice.getDriverDetails($route.current.params.id);
}
'races': function($route, F1APIservice) {
return F1APIservice.getDriverRaces($route.current.params.id);
}
}
})
driver
和races
被注入控制器:
controller('driverController', function($scope, driver, races, F1APIservice)
相关文章:
- Jasmine单元测试在监视服务方法时失败
- 从WCF服务接收应答's布尔方法
- AngularJs在调用服务方法后更新指令
- Web 服务方法名称无效
- 采用多种方法在控制器中进行角服务注入
- 调用WCF JSONP web服务方法时出现错误400
- 在Angular服务中使用$http和$q的正确方法
- 无法在Ionic服务中运行角度spotify方法
- 如何从指令的控制器调用依赖注入服务的嵌套方法
- 应用程序脚本高级驱动器API服务-newFile()方法未创建文件
- 测试angular服务内部方法调用
- Typescript+Angular公开服务方法
- 是否仍然存在获取Rest服务调用以返回纯字符串的方法
- 环回存储服务:如何使用从JS代码上传/下载方法
- Angularjs 控制器在服务方法返回之前从服务中分配变量
- 如何通过“getJSON”访问RESTful服务的“findById”方法
- 在 AngularJS 中与后端服务通信的最佳方法是什么?
- CanJs 模型服务方法实现
- 从客户端网站使用 ajax/jquery 将参数传递给 Web 服务方法
- AngularJS异步请求方法服务使用promise返回数据