283 lines
9.1 KiB
TypeScript
283 lines
9.1 KiB
TypeScript
/**
|
|
* @module
|
|
* @description
|
|
* The http module provides services to perform http requests. To get started, see the {@link Http}
|
|
* class.
|
|
*/
|
|
import {bind, Binding} from 'angular2/core';
|
|
import {Http, Jsonp} from './src/http/http';
|
|
import {XHRBackend, XHRConnection} from './src/http/backends/xhr_backend';
|
|
import {JSONPBackend, JSONPBackend_, JSONPConnection} from './src/http/backends/jsonp_backend';
|
|
import {BrowserXhr} from './src/http/backends/browser_xhr';
|
|
import {BrowserJsonp} from './src/http/backends/browser_jsonp';
|
|
import {BaseRequestOptions, RequestOptions} from './src/http/base_request_options';
|
|
import {ConnectionBackend} from './src/http/interfaces';
|
|
import {BaseResponseOptions, ResponseOptions} from './src/http/base_response_options';
|
|
|
|
export {MockConnection, MockBackend} from './src/http/backends/mock_backend';
|
|
export {Request} from './src/http/static_request';
|
|
export {Response} from './src/http/static_response';
|
|
|
|
export {
|
|
RequestOptionsArgs,
|
|
ResponseOptionsArgs,
|
|
Connection,
|
|
ConnectionBackend
|
|
} from './src/http/interfaces';
|
|
|
|
export {BrowserXhr} from './src/http/backends/browser_xhr';
|
|
export {BaseRequestOptions, RequestOptions} from './src/http/base_request_options';
|
|
export {BaseResponseOptions, ResponseOptions} from './src/http/base_response_options';
|
|
export {XHRBackend, XHRConnection} from './src/http/backends/xhr_backend';
|
|
export {JSONPBackend, JSONPConnection} from './src/http/backends/jsonp_backend';
|
|
export {Http, Jsonp} from './src/http/http';
|
|
|
|
export {Headers} from './src/http/headers';
|
|
|
|
export {ResponseTypes, ReadyStates, RequestMethods} from './src/http/enums';
|
|
export {URLSearchParams} from './src/http/url_search_params';
|
|
|
|
/**
|
|
* Provides a basic set of injectables to use the {@link Http} service in any application.
|
|
*
|
|
* The `HTTP_BINDINGS` should be included either in a component's injector,
|
|
* or in the root injector when bootstrapping an application.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/snj7Nv?p=preview))
|
|
*
|
|
* ```
|
|
* import {bootstrap, Component, NgFor, View} from 'angular2/angular2';
|
|
* import {HTTP_BINDINGS, Http} from 'angular2/http';
|
|
*
|
|
* @Component({
|
|
* selector: 'app',
|
|
* bindings: [HTTP_BINDINGS]
|
|
* })
|
|
* @View({
|
|
* template: `
|
|
* <div>
|
|
* <h1>People</h1>
|
|
* <ul>
|
|
* <li *ng-for="#person of people">
|
|
* {{person.name}}
|
|
* </li>
|
|
* </ul>
|
|
* </div>
|
|
* `,
|
|
* directives: [NgFor]
|
|
* })
|
|
* export class App {
|
|
* people: Object[];
|
|
* constructor(http:Http) {
|
|
* http.get('people.json').subscribe(res => {
|
|
* this.people = res.json();
|
|
* });
|
|
* }
|
|
* active:boolean = false;
|
|
* toggleActiveState() {
|
|
* this.active = !this.active;
|
|
* }
|
|
* }
|
|
*
|
|
* bootstrap(App)
|
|
* .catch(err => console.error(err));
|
|
* ```
|
|
*
|
|
* The primary public API included in `HTTP_BINDINGS` is the {@link Http} class.
|
|
* However, other bindings required by `Http` are included,
|
|
* which may be beneficial to override in certain cases.
|
|
*
|
|
* The bindings included in `HTTP_BINDINGS` include:
|
|
* * {@link Http}
|
|
* * {@link XHRBackend}
|
|
* * `BrowserXHR` - Private factory to create `XMLHttpRequest` instances
|
|
* * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class
|
|
* * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class
|
|
*
|
|
* There may be cases where it makes sense to extend the base request options,
|
|
* such as to add a search string to be appended to all URLs.
|
|
* To accomplish this, a new binding for {@link RequestOptions} should
|
|
* be added in the same injector as `HTTP_BINDINGS`.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/aCMEXi?p=preview))
|
|
*
|
|
* ```
|
|
* import {bind, bootstrap} from 'angular2/angular2';
|
|
* import {HTTP_BINDINGS, BaseRequestOptions, RequestOptions} from 'angular2/http';
|
|
*
|
|
* class MyOptions extends BaseRequestOptions {
|
|
* search: string = 'coreTeam=true';
|
|
* }
|
|
*
|
|
* bootstrap(App, [HTTP_BINDINGS, bind(RequestOptions).toClass(MyOptions)])
|
|
* .catch(err => console.error(err));
|
|
* ```
|
|
*
|
|
* Likewise, to use a mock backend for unit tests, the {@link XHRBackend}
|
|
* binding should be bound to {@link MockBackend}.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/7LWALD?p=preview))
|
|
*
|
|
* ```
|
|
* import {bind, Injector} from 'angular2/angular2';
|
|
* import {HTTP_BINDINGS, Http, Response, XHRBackend, MockBackend} from 'angular2/http';
|
|
*
|
|
* var people = [{name: 'Jeff'}, {name: 'Tobias'}];
|
|
*
|
|
* var injector = Injector.resolveAndCreate([
|
|
* HTTP_BINDINGS,
|
|
* MockBackend,
|
|
* bind(XHRBackend).toAlias(MockBackend)
|
|
* ]);
|
|
* var http = injector.get(Http);
|
|
* var backend = injector.get(MockBackend);
|
|
*
|
|
* // Listen for any new requests
|
|
* backend.connections.observer({
|
|
* next: connection => {
|
|
* var response = new Response({body: people});
|
|
* setTimeout(() => {
|
|
* // Send a response to the request
|
|
* connection.mockRespond(response);
|
|
* });
|
|
* });
|
|
*
|
|
* http.get('people.json').observer({
|
|
* next: res => {
|
|
* // Response came from mock backend
|
|
* console.log('first person', res.json()[0].name);
|
|
* }
|
|
* });
|
|
* ```
|
|
*/
|
|
export const HTTP_BINDINGS: any[] = [
|
|
// TODO(pascal): use factory type annotations once supported in DI
|
|
// issue: https://github.com/angular/angular/issues/3183
|
|
bind(Http)
|
|
.toFactory((xhrBackend, requestOptions) => { return new Http(xhrBackend, requestOptions);},
|
|
[XHRBackend, RequestOptions]),
|
|
BrowserXhr,
|
|
bind(RequestOptions).toClass(BaseRequestOptions),
|
|
bind(ResponseOptions).toClass(BaseResponseOptions),
|
|
XHRBackend
|
|
];
|
|
|
|
|
|
/**
|
|
* Provides a basic set of bindings to use the {@link Jsonp} service in any application.
|
|
*
|
|
* The `JSONP_BINDINGS` should be included either in a component's injector,
|
|
* or in the root injector when bootstrapping an application.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/vmeN4F?p=preview))
|
|
*
|
|
* ```
|
|
* import {Component, NgFor, View} from 'angular2/angular2';
|
|
* import {JSONP_BINDINGS, Jsonp} from 'angular2/http';
|
|
*
|
|
* @Component({
|
|
* selector: 'app',
|
|
* bindings: [JSONP_BINDINGS]
|
|
* })
|
|
* @View({
|
|
* template: `
|
|
* <div>
|
|
* <h1>People</h1>
|
|
* <ul>
|
|
* <li *ng-for="#person of people">
|
|
* {{person.name}}
|
|
* </li>
|
|
* </ul>
|
|
* </div>
|
|
* `,
|
|
* directives: [NgFor]
|
|
* })
|
|
* export class App {
|
|
* people: Array<Object>;
|
|
* constructor(jsonp:Jsonp) {
|
|
* jsonp.request('people.json').subscribe(res => {
|
|
* this.people = res.json();
|
|
* })
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* The primary public API included in `JSONP_BINDINGS` is the {@link Jsonp} class.
|
|
* However, other bindings required by `Jsonp` are included,
|
|
* which may be beneficial to override in certain cases.
|
|
*
|
|
* The bindings included in `JSONP_BINDINGS` include:
|
|
* * {@link Jsonp}
|
|
* * {@link JSONPBackend}
|
|
* * `BrowserJsonp` - Private factory
|
|
* * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class
|
|
* * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class
|
|
*
|
|
* There may be cases where it makes sense to extend the base request options,
|
|
* such as to add a search string to be appended to all URLs.
|
|
* To accomplish this, a new binding for {@link RequestOptions} should
|
|
* be added in the same injector as `JSONP_BINDINGS`.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/TFug7x?p=preview))
|
|
*
|
|
* ```
|
|
* import {bind, bootstrap} from 'angular2/angular2';
|
|
* import {JSONP_BINDINGS, BaseRequestOptions, RequestOptions} from 'angular2/http';
|
|
*
|
|
* class MyOptions extends BaseRequestOptions {
|
|
* search: string = 'coreTeam=true';
|
|
* }
|
|
*
|
|
* bootstrap(App, [JSONP_BINDINGS, bind(RequestOptions).toClass(MyOptions)])
|
|
* .catch(err => console.error(err));
|
|
* ```
|
|
*
|
|
* Likewise, to use a mock backend for unit tests, the {@link JSONPBackend}
|
|
* binding should be bound to {@link MockBackend}.
|
|
*
|
|
* ### Example ([live demo](http://plnkr.co/edit/HDqZWL?p=preview))
|
|
*
|
|
* ```
|
|
* import {bind, Injector} from 'angular2/angular2';
|
|
* import {JSONP_BINDINGS, Jsonp, Response, JSONPBackend, MockBackend} from 'angular2/http';
|
|
*
|
|
* var people = [{name: 'Jeff'}, {name: 'Tobias'}];
|
|
* var injector = Injector.resolveAndCreate([
|
|
* JSONP_BINDINGS,
|
|
* MockBackend,
|
|
* bind(JSONPBackend).toAlias(MockBackend)
|
|
* ]);
|
|
* var jsonp = injector.get(Jsonp);
|
|
* var backend = injector.get(MockBackend);
|
|
*
|
|
* // Listen for any new requests
|
|
* backend.connections.observer({
|
|
* next: connection => {
|
|
* var response = new Response({body: people});
|
|
* setTimeout(() => {
|
|
* // Send a response to the request
|
|
* connection.mockRespond(response);
|
|
* });
|
|
* });
|
|
|
|
* jsonp.get('people.json').observer({
|
|
* next: res => {
|
|
* // Response came from mock backend
|
|
* console.log('first person', res.json()[0].name);
|
|
* }
|
|
* });
|
|
* ```
|
|
*/
|
|
export const JSONP_BINDINGS: any[] = [
|
|
// TODO(pascal): use factory type annotations once supported in DI
|
|
// issue: https://github.com/angular/angular/issues/3183
|
|
bind(Jsonp)
|
|
.toFactory(
|
|
(jsonpBackend, requestOptions) => { return new Jsonp(jsonpBackend, requestOptions);},
|
|
[JSONPBackend, RequestOptions]),
|
|
BrowserJsonp,
|
|
bind(RequestOptions).toClass(BaseRequestOptions),
|
|
bind(ResponseOptions).toClass(BaseResponseOptions),
|
|
bind(JSONPBackend).toClass(JSONPBackend_)
|
|
];
|