承诺返回未更新的数组范围

Promise return Array Scope not updated

本文关键字:数组 范围 更新 返回 承诺      更新时间:2023-09-26

显示数据

<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;
}
输出:

输出详细信息:[object object],[object object],[object object]....

我的范围。

getAllEngagementItems不更新,视图不获取列表项。

我不认为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()返回promise,但实际查询是异步运行的。因此,当您返回output时,它的值将是undefined。然而,undefined是一个原始值,而不是对象。因此,当您稍后更新output时,它不会影响$scope.getAllEngagementItems的实际值。