使用相同的控制器方法填充范围中的不同列表

时间:2015-11-21 21:45:47

标签: angularjs

我正在尝试使用一种控制器方法来填充我视图中的不同列表。

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;。但这不允许我重新使用该功能。我希望我能说清楚。

谢谢

2 个答案:

答案 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);