Search code examples
angularjsrestangularjs-scopeangularjs-ng-repeatangularjs-service

How to display JSON list data in angularjs


I am new to Angularjs and having trouble displaying data . i.e. Json array

This is the result of my rest service call:

{
    "users": [{
        "id": 1,
        "firstname": "Naveen",
        "lastname": "Dutt",
        "email": "[email protected]",
        "telephone": "7829418456445355"
    }]
}

And this is my controller:

app.controller('MyCtrl2', ['$scope', 'NFactory', function ($scope, NFactory) {
    alert("here??");
    $scope.bla = NFactory.query;
    alert("here??" + $scope.bla);

    NFactory.get({}, function (nFactory) {
        $scope.allposts = nFactory.firstname;
    })
}]);

This is my html:

<div>
    <ul >
        <li ng-repeat="user in bla"> {{ user.firstname }} </li>
    </ul>
</div>

but it doesnt show anything on UI. what can be the problem? please suggest.


Solution

  • It happens because you call async task. I would wrap result with promise.

    Here is basic simulation of async call:

    Demo Fiddle

    var app = angular.module('myModule', ['ngResource']);
    
    app.controller('fessCntrl', function ($scope, Data) {
    
            Data.query()
                .then(function (result) {
                    console.log(result);
                $scope.bla = result.users;
            }, function (result) {
                alert("Error: No data returned");
            });
    
    
    });
    
    app.$inject = ['$scope', 'Data'];
    
    app.factory('Data', ['$resource', '$q', function ($resource, $q) {
        var data = {
            "users": [{
                "id": 1,
                "firstname": "Naveen",
                "lastname": "Dutt",
                "email": "[email protected]",
                "telephone": "7829418456445355"
            }]
        };
    
    //Actually we can use $resource
    //var data = $resource('localhost/shfofx/PHP/Rest/alertLossDetails.php', 
    //       {},
    //      { query: {method:'GET', params:{}}}
    //               );
        var factory = {
    
            query: function (selectedSubject) {
                var deferred = $q.defer();          
                deferred.resolve(data);           
                return deferred.promise;
            }
    
        }
        return factory;
    }]);