Promise返回数组范围未更新

时间:2014-05-17 21:44:38

标签: javascript angularjs

我显示像

这样的数据
<tr ng-repeat="item in getAllEngagementItems | filter:searchText">
    <td>{{item.wafId}}</td>
    <td>{{item.engagementProjectName}}</td>
    <td>{{item.engagementLibraryStatus}}</td>
</tr>

在控制器中

app.controller("EngagementController", function ($scope, WAFDatafactory) {
    $scope.getAllEngagementItems = myfunction();

    function myfunction() {

        var output;
        var items = WAFDatafactory.getAllEngagementItems();

        items.$promise.then(function (results) {
            $scope.$emit('UpdateEngagementCount', results.length);
            output = results;
            console.log("Output detais :" + output);
        }
        , function (error) {
            alert("Failed to Retrive data from server" + error);
            console.log("Error detais :" + error);
        });

        return output;
    }

});

的DataFactory

factory.getAllEngagementItems = function () {
    var allEngagementItems = $resource("/api/data/GetEngagementData/").query();
    return allEngagementItems;
}

输出:

输出detais:[object Object],[object Object],[object Object] ....

我的scope.getAllEngagementItems未获得更新,并且视图无法获取列表项。

1 个答案:

答案 0 :(得分:1)

我没有看到output是必要的。你可以回复一个承诺。

app.controller("EngagementController", function ($scope, WAFDatafactory) {
    $scope.getAllEngagementItems = myfunction();

    function myfunction() {

        var items = WAFDatafactory.getAllEngagementItems();

        items.$promise.then(function (results) {
            $scope.$emit('UpdateEngagementCount', results.length);
            console.log("Output detais :" + results);
        }
        , function (error) {
            alert("Failed to Retrive data from server" + error);
            console.log("Error detais :" + error);
        });

        return items;
    }

});

您的代码无效的原因是:

运行myFunction()时,WAFDatafactory.getAllEngagementItems()返回了一个承诺,但实际的查询是以异步方式运行的。因此,当您返回时output的值为undefined。但是,undefined是原始值而不是对象。因此,当您稍后更新output时,它永远不会影响$scope.getAllEngagementItems的实际值。