Consuming REST services with AngularJS

There are a lot of complicated examples out there on consuming REST services with AngularJS. If you're staring at a fully developed $resource object for the first time, it can be difficult to take in.

Let's step all the way back... What is a $resource? it's vaguely named, but if you just take the first 3 letters and add a "T", it will make a lot more sense.

It is an AngularJS resource, aka $resource or ngResource, "let's you interact with RESTful server-side data source."

In the examples below, I am using the angular-seed project as a starting point for the following code examples.

Before we move on...
Don't forget: You will need to include angular-resource.js if you are not using the fully minimized version of angularjs.

index.html

...
  <script src="lib/angular/angular.js"></script>
  <script src="lib/angular/angular-resource.js"></script>
...

And with that, let's create our first REST consumer service. In this example, we will create a ngResource which sends a GET request to the angular.js issue queue on GitHub. (https://api.github.com/repos/angular/angular.js/issues).

By default, the services.js file looks like this. (I moved the dot before value() to the next line so it will make sense when we add more)

js/services.js (default)

angular.module('myApp.services', [])
  .value('version', '0.1');

To add our first resource to this service, we need to inject ngResource and then add a factory to define our resource.

js/services.js (new)

angular.module('myApp.services', ['ngResource'])
  .factory('AngularIssues', function($resource){
    return $resource('https://api.github.com/repos/angular/angular.js/issues', {})
  })
  .value('version', '0.1');

That is all you need to consume a REST service that doesn't require any parameters.

Let's use MyCtrl1 in the seed project to fetch and display the issue data.

To use this service, we need to inject the resource (AngularIssues) and $scope. Then, just add the handler logic.

Pitfall: Understand, the result needs to be set inside the callback because resource requests are asynchronous.
$resource.get() vs $resource.query(): If the endpoint returns an array of object (like GitHub is doing), use .query(). i.e. AngularIssues.query() On the other hand, if it is not returning an array, use .get().

js/controllers.js

angular.module('myApp.controllers', []).
  controller('MyCtrl1', ['$scope', 'AngularIssues', function($scope, AngularIssues) {
    // Instantiate an object to store your scope data in (Best Practices)
    $scope.data = {};
   
    AngularIssues.query(function(response) {
      // Assign the response INSIDE the callback
      $scope.data.issues = response;
    });

  }])
  .controller('MyCtrl2', [function() {

  }]);
Side Note: Notice I instantiate $scope.data and then assign the issues to $scope.data.issues. If you're not sure why I did not just use $scope.issues, make it a point to look at Understanding Scopes and the best practices video.

This controller now will retrieve the AngularJS GitHub issues when #/view1 is loaded, and assign the resulting object to $scope.data.issues.

Now it's time for the fun part. Let's use ng-repeat to populate a table with the issue data.

partials/partial1.html

<h3>AngularJS GitHub Issues</h3>
<table class="table table-striped">
  <tr>
    <th>Number</th>
    <th>State</th>
    <th>Reporter</th>
    <th>Title</th>
    <th>Description</th>
  </tr>
  <tr ng-repeat="issue in data.issues">
    <td>{{issue.number}}</td>
    <td>{{issue.state}}</td>
    <td>{{issue.user.login}}</td>
    <td>{{issue.title}}</td>
    <td>{{issue.body}}</td>
  </tr>
</table>

If you run your app, you should now see a list of issues.

Note: If running the app locally, you will need to disable browser security. On Mac OS X, close Chrome completely and run this from the terminal:
open -a Google\ Chrome --args --disable-web-security

You will not have to worry about this if you are running it on a web server.

The code for this article has been pushed up to GitHub: https://github.com/mikemilano/angular-seed-rest

Here's a jsfiddle I based a talk on for our North County San Diego AngularJS meetup, that does not use angular-seed, but has a few more bells and whistles: http://jsfiddle.net/coder1/9TsdS/1/

Comments

the script tips and collection of useful information like this while developing different apps and software is informative and I am glad for the work. Consuming REST services with AngularJS is a good share and I wish to read more from here soon.
magnetic balls

Kami sudah sangat berpengalaman dalam merencanakan perjalanan wisata yang berkesan. Jadi jika anda mempunyai keinginan untuk melakukan perjalanan wisata, percayakan kepada kami. kunjungi tempat wisata terbaik. Jadi anda tertarik berwisata ke daerah mana? lihat info lengkapnya
Saat ini trend pashmina dengan motif cantik semakin banyak diminati. Oleh karena itu anda bisa melihat beberapa model pilihan pada website kami. Semuanya kami tawarkan dengan harga yang sangat murah. pashmina sifon dengan bahan terbaik dan warna polos. Bagi anda yang mau membaca informasi selengkapnya silahkan pilih produk yang anda inginkan
Menyediakan pilihan busana gamis terbaik, dengan motif batik yang akan memeriahkan hari raya dan momen spesial anda. Segera lihat koleksi lengkap kami di website jualan busana.jual busana muslim gamis secara online. Ingin mengetahui infonya lebih lengkap? Silahkan click here
Dapatkan kumpulan kata-kata cinta yang romantis untuk menyatakan perasaan anda pada orang yang anda kasihi. Semuanya terasa lebih indah dengan ungkapan yang menyenangkan hati. kata-kata mutiara cinta. Menarik kan? Silahkan saudara cari infonya dengan read more
Kehidupan seksualitas sebuah rumah tangga, kadang terasa membosankan. Dengan sedikit bantuan dari alat bantu sex ataupun obat peransang yang aman anda bisa merubah kehidupan seksual rumah tangga anda menjadi penuh warna. alat pembesar kelamin pria. Jika anda perlu keterangan yang lebih lengkap? Dapatkan info selengkapnya
Saat ini kehidupan wanita semakin kompleks, karena selain berperan sebagai ibu juga seringkali harus berperan sebagai wanita karir yang juga mempunyai tanggung jawab dalam keuangan keluarga. Dapatkan tips-tips seputar masalah wanita di blog kami. tips untuk tampil cantik alami. Mau tahu lebih banyak tentang tips wanita?kunjungi website
Untuk membantu banyak orang dalam mempelajari dunia web, maka kami mencoba untuk memberikan beberapa panduan blogging yang sangat sesuai bagi para pemula. Temukan tips dan tutorial selengkapnya di sini….membuat blog sendiri dengan cepat dan mudah. Ingin info detail tentang bagaimana anda bisa membuat blog dengan mudah? Lihat info terbaru dari kami

Kekompakan sangat diperlukan dalam sebuahperusahaan dan oleh karena itu banyak sekali perusahaan yang mentraining karyawannya pada program-program teamwork untuk melatih kekompakan dan membentuk kebersamaan.lokasi training outbound. Jika anda ingin mencoba paket outbound terbaik silahkan cari infonya di siniSilahkan di baca
Kami adalah jasa travel dan rental mobil yang sudah sangat berpengalaman di kota padang. Jika anda membutuhkan paket perjalanan wisata di wilayah sumatera barat, segera hubungi kami pelangi holidays. sewa daihatsu xenia di padang. Tertarik berwisata ke sumatera barat, padang dan sekitarnya? Silahkan Info lengkapnya
Dapatkan beragam model jaket korea yang sedang tren saat ini. Di sini kami bisa memberikan jaket korea dengan bahan yang berkualitas dengan penawaran yang terbaik. jual jaket korea couple untuk pasangan. Ingin lihat koleksi lengkap dari beragam jaket korea yang keren dan elegan? Buruan berita terbarunya
Penyakit sesak nafas jangan dipandang sebelah mata, karena penyakit ini bukan hanya mengganggu aktifitas kita, tetapi juga dapat mengakibatkan kematian. Obati segera dengan pengobatan yang alami, karena ini akan jauh lebih aman. mengatasi sesak nafas dengan bahan herbal alami. Jika anda ingin herbal alternatif ini klik di sini
Sprei adalah bagian yang dapat menentukan kenyamanan istirahat anda. Jika salah memilih sprei, maka bisa jadi istirahat anda akan terasa tidak nyaman. Kami meyediakan berbagai sprei home made yang sangat berkualitas dan menjamin kenyamanan istirahat anda.jual sprei dan bed cover berkualitas. Ingin mencoba sprei yang berkualitas yang dibuat secara homemade dengan sangat memperhatikan kualitas bahan dan jahitan?junjungi halaman berikut
Pacar kuku yang mudah dihapus akan sangat membantu kaum wanita muslimah yang ingin berias, tapi tetap bersih saat sholat karena pacar kuku ini mudah terhapus saat wudhu. rani kone henna berkualitas. Bagia yang tertarik untuk mengetahui lebih jauh lagi, anda bisa membaca lihat koleksi kami

I very much to like and agree with your point of view. Thank you for sharing. Welcome to look at my website and blog articles. Hope we can become good friends, and exchange and to help each other
visit website

Add new comment