Angular JS Promise - 在forEach循环中绑定

时间:2014-10-08 09:26:00

标签: arrays angularjs binding iteration promise

我正在使用angular.forEach迭代一个数组,对于数组中的每个值,我使用GET /来检索它的名称(数组包含键),然后将该名称推送到另一个数组中。这个新数组正在下拉框中使用(ngOptions)。

我遇到的问题是在GET /响应到达之前创建了下拉列表,因此它只显示空白选项,然后当它们到达时显示每个下拉列表中的所有选项。

我有以下代码:

angular.forEach($scope.pots, function(value, key)   {
    $scope.selections = [];
    angular.forEach(value, function(val, ky) {
        if (ky === "selections") {
            angular.forEach(val, function(v, k) {
                $http.get('/selections/' + v).then(function(response) {
                    var response = response.data;
                    $scope.selection = response[0];
                    $scope.selectionName = $scope.selection.name;
                    $scope.selections.push({name : $scope.selectionName});
                    value["selectionNames"] = $scope.selections;
                })

            })
        }
    })
value["selectionNames"] = $scope.selections;
console.log(value);

所以我迭代一个包含选择列表的花盆列表,使用GET /根据选择列表获取名称列表,最后将其推入底池的范围。我在每个底池后重置选择。

造成这个问题的原因是,所有问题都会立即响应,并且它们会绕过$scope.selections = [];代码,所以它只是将所有三个底池中的完整数组推入每个底池。

有任何提示/建议吗?谢谢。

1 个答案:

答案 0 :(得分:0)

看起来我已经修好了......有人可以确认这是一个好习惯吗?我每次基于pot(value)中的selectionNames值进行迭代时,基本上都会重新创建$scope.selections

angular.forEach($scope.pots, function(value, key)   {
    $scope.selections = [];
    angular.forEach(value, function(val, ky) {
        if (ky === "selections") {
            angular.forEach(val, function(v, k) {
                $http.get('/selections/' + v).then(function(response) {
                    $scope.selections = [];
                    var response = response.data;
                    $scope.selection = response[0];
                    $scope.selectionName = $scope.selection.name;
                    var currentSelections = value.selectionNames;
                    angular.forEach(currentSelections, function(csV, csK) {
                        $scope.selections.push(csv);
                    })
                    $scope.selections.push({name : $scope.selectionName});
                    value["selectionNames"] = $scope.selections;
                })

            })
        }
    })
value["selectionNames"] = $scope.selections;
console.log(value);