srieen
srieen

Reputation: 59

Promise return Array Scope not updated

i display the data like

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

In controller

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;
}

output :

Output detais :[object Object],[object Object],[object Object]....

my scope.getAllEngagementItems does not get updated and view does not get list items.

Upvotes: 1

Views: 124

Answers (1)

Tong Shen
Tong Shen

Reputation: 1367

I don't see that output is necessary. You can just return a promise.

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;
    }

});

The reason that your code didn't work was:

When myFunction() was run, WAFDatafactory.getAllEngagementItems() returned a promise, but the actual query was run async. So the value of output would be undefined when you returned it. However, undefined is a primitive value instead of an object. So when you updated output later on, it would never effect the real value of $scope.getAllEngagementItems .

Upvotes: 1

Related Questions