Search code examples
angularjsangularjs-scopeangular-http

Getting data from a web service with Angular.js


Im trying to get data in a Json format from a remote WS using Angular and im having some trouble. The data comes from the web service correctly but i cant use it inside the controller. Why is that? Angular Code:

var booksJson;
var app = angular.module('booksInventoryApp',[]);

// get data from the WS
app.run(function ($http) {
    $http.get("https://SOME_API_PATH").success(function (data) {
        booksJson = data;
        console.log(data);  //Working
    });
});

app.controller('booksCtrl', function ($scope) { 
    $scope.data = booksJson;
    console.log($scope.data); //NOT WORKING
});

HTML:

<section ng-controller="booksCtrl">
<h2 ng-repeat="book in data">{{book.name}}</h2>
</section>

Solution

  • You should put your $http.get inside your controller.

    Also, the web service returns an object not an array. So your ng-repeat should be something like this: book in data.books

    Here is a working example:

    var app = angular.module('booksInventoryApp', []);
    
    app.controller('booksCtrl', function($scope, $http) {
    
      $http.get("https://whispering-woodland-9020.herokuapp.com/getAllBooks")
        .then(function(response) {
          $scope.data = response.data;
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <article ng-app="booksInventoryApp">
      <section ng-controller="booksCtrl">
        <h2 ng-repeat="book in data.books">{{book.name}}</h2>    
      </section>
    </article>