我想知道如何动态更改$ http调用,以便$ http请求URL根据在ng-repeat列表中单击的元素而有所不同。但是我被困住了。
目前,我在索引页面上设置了ng-repeat:
<div ng-repeat="team in nt.getStandings">
<a href="#/nation-details/{{team.team_id}}"><h2>{{team.team_name}}</h2></a>
<p>Team ID = {{team.team_id}}</p>
</div>
变量getStandings
是通过$ http调用从API获取的。像这样:
return $http.get(
'http://api.com/standings/1005?Authorization=xxxx'
)
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
然后StandingsService附加到我的控制器中的getStandings
变量。
“1005”是一个特定阵列的属性,在这种情况下是一系列竞赛中的特定体育比赛。
因此,在我的索引页面上,我使用ng-repeat列出该竞赛中的所有团队。
正如您在上面的html中所看到的,我已经链接了每个团队,以便它动态生成一个URL,将team_id
追加到最后,使用$routeParams
我将其定义为变量{{ 1}}。
whichTeam
这很好用,团队ID是根据点击的团队动态生成的。
就像上面的“StandingsService”一样,我还有另一个名为“TeamService”的服务,该服务生成$ http请求以提取团队数据。目前虽然它是静态设置来调用一个单独的团队 - 我想让服务接受whichTeam变量,以便调用根据点击的团队而变化。
这是静态团队$ http请求(我已将URL分开并连接以使其更清晰):
<h1>Dynamic Team ID = {{whichTeam}}</h1>
我希望 return $http.get(
'http://api.com/team/' + '16110' + '?Authorization=xxxx'
)
部分(引用一个团队)成为16110
变量,允许它提取正确的团队数据,但我不知道如何写这(或者如果可能的话)。
我希望我已经清楚了 - 如果需要,我很乐意进一步澄清。提前谢谢。
答案 0 :(得分:0)
建厂:
app.factory("DataService", ["$http", function($http) {
return {
getTeamDetailsById: function(teamId) {
return $http.get('path/to/api' + teamId + '?Auth=xxxx')
}
};
}]);
在控制器中使用它:
app.controller("MainCtrl", ["$scope", "DataService", function($scope, DataService) {
$scope.teamDetails = {};
$scope.getTeamDetailsById = function(event, teamId) {
//prevent click navigation
event.preventDefault();
//call factory service
DataService.getTeamDetailsById(teamId).then(function(response) {
//success callback
$scope.teamDetails = response.data;
}, function(response) {
//an error has occurred
});
}
}]);
在ng-repeat
元素中:
<div ng-repeat="team in teams">
<a href ng-click="getTeamDetailsById($event, team.team_id)">{{team.team_name}}</a>
</div>
以上假设您只有一个状态并且只存储在一个控制器中。如果您想使用使用$stateProvider
的不同状态,那么您必须使用参数,方法是使用ui-sref
并传入团队ID。
如果确实使用了$states
和参数,请执行以下操作:
<a href ng-click="goToState($event, team.team_id)">{{ team.team_name }}</a>
$scope.goToState = function(e, teamId) {
$state.go("teamDetailsState", { "teamId": teamId });
}