我正在尝试使用一种控制器方法来填充我视图中的不同列表。
var loadPlayers = function (division) {
var year = new Date().getFullYear() - parseInt(division);
console.log(year);
return PlayersService.getPlayersByDate(year).then(function(response){
return response;
});
};
$scope.playersU20 = loadPlayers(20);
$scope.playersU18 = loadPlayers(18);
PlayersService
this.getPlayersByDate = function (year) {
var promise = $http.get('/playerByYear/' + year).then(function(response) {
return response.data;
});
return promise;
};
但这不起作用。它只在删除return语句时才有用,只需$scope.playersU20 = response;
。但这不允许我重新使用该功能。我希望我能说清楚。
谢谢
答案 0 :(得分:1)
then
函数返回一个promise,因此您需要更新在promise履行时调用的success函数中的作用域:
loadPlayers(20).then(function(players) { $scope.playersU20 = players; });
loadPlayers(18).then(function(players) { $scope.playersU18 = players; });
我会重构删除loadPlayers
- 如果您使用的是几年而不是几年前,您可以直接在控制器中使用您的玩家服务,这似乎是多余的。如果您还需要几年前,请将其添加为玩家服务的附加功能。您还希望添加错误处理。
答案 1 :(得分:0)
更改loadPlayers()
功能如下。你在这个问题上做的那个不是javascript中的可重用函数。我为您提供了一个链接,以了解如何在JavaScript中正确声明函数。它将使您更好地理解不仅仅知道如何在Javascript中创建函数,还可以讨论函数的范围。 JavaScript Function Tutorial
function loadPlayers (division) {
var year = new Date().getFullYear() - parseInt(division);
console.log(year);
return PlayersService.getPlayersByDate(year).then(function(response){
return response;
});
};
$scope.playersU20 = loadPlayers(20);
$scope.playersU18 = loadPlayers(18);