ng-ajax
Easily make ajax requests in AngularJS. Plunker Demo
ng-ajax provides straight-forward directives which enable you to perform AJAX calls without writing any javascript code, and with great controls.
Links
Quick Examples
<input type="text" ng-model="postNum">
<ng-ajax-control auto debounce-duration="1000">
<ng-ajax method="GET"
url="'http://jsonplaceholder.typicode.com/posts/' + postNum"
ajax-error="error"
ajax-success="response">
</ng-ajax>
</ng-ajax-control>
With auto
setting to true
, the directive performs a GET request to retrieve the post whenever the url is changed. Automatically generated requests will be debounced so that the GET request is only performed once every 1 second.
<button ng-ajax-emit="post-and-get">Post And Get</button>
<ng-ajax-control auto="false"
on="post-and-get"
loading="isAnyLoading"
flow="series">
<ng-ajax method="POST"
url="'http://jsonplaceholder.typicode.com/posts'"
body="{title:'foo', id: 2}"
loading="isLoading1"
ajax-error="error1"
ajax-success="response1">
</ng-ajax>
<ng-ajax method="GET"
url="'http://jsonplaceholder.typicode.com/posts/' + (response1.data.id)"
loading="isLoading2"
ajax-error="error2"
ajax-success="response2">
</ng-ajax>
</ng-ajax-control>
When the button is clicked, it'll emit a 'post-and-get' event, thus triggers the directive to perform two AJAX requests in series — first the POST request and then the GET request. Note that, the second POST request is able to perform the AJAX call by using the data from the response of the first GET request.
Installations
Installation is easy as ng-ajax has minimal dependencies — only the AngularJS (v1.3 and upper versions) is required.
Install with npm
$ npm install ng-ajax
Install with bowser
$ bower install ng-ajax
Getting started
- Add references to AngularJS, e.g.:
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js""></script>
- Add references to ng-ajax's javascript:
<script src="https://cdn.rawgit.com/alex-ou/ng-ajax/master/dist/ng-ajax.min.js"></script>
- Where you declare your app module, add ngAjax:
angular.module("myApp", ["ngAjax"]);
- In your html file within the controller, add:
<ng-ajax-control auto debounce-duration="1000">
<ng-ajax
method="GET"
url="'data.json'"
loading="isLoading"
ajax-error="error"
ajax-success="response"></ng-ajax>
</ng-ajax-control>
Documentation
Basic usage is as below, ng-ajax-control can have multiple ng-ajax children. ng-ajax can ran in parallel
or series
depending on the flow
property.
<ng-ajax-control flow="parallel|series">
<ng-ajax></ng-ajax>
<ng-ajax></ng-ajax>
</ng-ajax-control>
<ng-ajax-control> directive
Controls the behaviors of the ng-ajax children, supported properties:
Property Name | Type | Default | Description |
---|---|---|---|
auto | Boolean | false |
If true , automatically performs the Ajax request when either url or params changes. |
debounce-duration | Number | Length of time in milliseconds to debounce multiple automatically generated requests. | |
on | String | Specify the event name to listen, once the event is received, run all the AJAX requests. See ng-ajax-emit . |
|
loading | String | angular.noop | Binding to a variable that indicates if any of the enclosed AJAX calls is being performed asynchronously. |
flow | String | parallel |
parallel or series . If parallel , runs the all the AJAX requests in parallel, without waiting until the previous function has completed. As soon as the flow kicks off, the loading is set to true, once all the AJAX requests have completed, loading is set to false. If series , run the AJAX requests in series, each one running once the previous one has completed. If any AJAX requests in the series pass fail, no more requests are run. |
<ng-ajax> directive
ng-ajax exposes $http functionality, supported properties:
Property Name | Type | Default | Description |
---|---|---|---|
url | String | The URL target of the request. | |
method | String | 'GET' | The HTTP method to use such as 'GET', 'POST', 'PUT', or 'DELETE'. |
params | Object | An object that contains query parameters to be appended to the specified url when generating a request. If you wish to set the body content when making a POST request, you should use the body property instead. | |
headers | Object | HTTP request headers to send. Example: headers='{"Content-Type": "application/x-www-form-urlencoded"}' |
|
body | Object | Body content to send with the request, typically used with "POST" requests. If Content-Type in the header is set to a value listed below, then the body will be encoded accordingly. content-type="application/json" body is encoded like {"foo":"bar baz","x":1} content-type="application/x-www-form-urlencoded" body is encoded like foo=bar+baz&x=1 |
|
loading | angular.noop | Binding to a variable that indicates if the AJAX call is being performed asynchronously. | |
ajax-response | angular.noop | Binding to a variable that will be set to the response object when the AJAX call is successful (a response status code between 200 and 299) | |
ajax-error | angular.noop | Binding to a variable that will be set to the response object when the AJAX call is not successful |
<ng-ajax-emit> directive
Listens to the click event of the attached element, and dispatches an event eventName
through the $rootScope to notify the ng-ajax-control to run all the AJAX requests.
Can only be used as an attribute, e.g.
<button ng-ajax-emit='eventName'></button>
`