Contributes to #2407 - Dropped the “2” in “Angular 2” and “angular2_*” where appropriate. - Did a partial sync of `_cache/guide/pipes.jade` - In quickstart, changed `Try changing the message to "Hello Angular 2!”` to `Try changing the message to "Hello Again Angular!”`.
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
extends ../../../ts/_cache/guide/server-communication.jade
 | 
						|
 | 
						|
block includes
 | 
						|
  include ../_util-fns
 | 
						|
  - var _Http = 'BrowserClient';
 | 
						|
  - var _Angular_Http = 'Dart <code>BrowserClient</code>'
 | 
						|
  - var _httpUrl = 'https://pub.dartlang.org/packages/http'
 | 
						|
  - var _Angular_http_library = 'Dart <a href="' + _httpUrl + '"><b>http</b></a> library'
 | 
						|
 | 
						|
block demos-list
 | 
						|
  :marked
 | 
						|
    - [HTTP client: Tour of Heroes](#http-client)
 | 
						|
    - [JSONP client: Wikipedia to fetch data from a service that does not support CORS (**under development**)](#cors)
 | 
						|
 | 
						|
block http-providers
 | 
						|
  :marked
 | 
						|
    Actually, it is unnecessary to include `BrowserClient` in the list of providers.
 | 
						|
    ***But*** as is mentioned in the *Angular Dart Transformer* [wiki page][ng2dtri],
 | 
						|
    the template compiler _generates_ dependency injection code, hence all the
 | 
						|
    identifiers used in DI have to be collected by the Angular transformer
 | 
						|
    so that the libraries containing these identifiers can be transformed.
 | 
						|
 | 
						|
    Unless special steps are taken, Dart libraries like `http`
 | 
						|
    are not transformed. To ensure that the `BrowserClient` identifier is available
 | 
						|
    for DI, we must add a `resolved_identifiers` parameter to the `angular2`
 | 
						|
    transformer in `pubspec.yaml`:
 | 
						|
 | 
						|
    [ng2dtri]: https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer#resolved_identifiers
 | 
						|
 | 
						|
  - var stylePattern = { pnk: /(resolved_identifiers:|Browser.*)/gm, otl: /(- angular2:)|(transformers:)/g };
 | 
						|
  +makeExcerpt('pubspec.yaml', 'transformers', null, stylePattern)
 | 
						|
 | 
						|
block getheroes-and-addhero
 | 
						|
  :marked
 | 
						|
    The hero service `getHeroes()` and `addHero()` asynchronous methods return the
 | 
						|
    [`Future`](https://api.dartlang.org/stable/dart-async/Future-class.html)
 | 
						|
    values of the current hero list and the newly added hero,
 | 
						|
    respectively. The hero list component methods of the same name specifying
 | 
						|
    the actions to be taken when the asynchronous method calls succeed or fail.
 | 
						|
 | 
						|
    For more information about `Future`s, consult any one
 | 
						|
    of the [articles](https://www.dartlang.org/articles/) on asynchronous
 | 
						|
    programming in Dart, or the tutorial on 
 | 
						|
    [_Asynchronous Programming: Futures_](https://www.dartlang.org/docs/tutorials/futures/).
 | 
						|
 | 
						|
block parse-json
 | 
						|
  :marked
 | 
						|
    The response data are in JSON string form.
 | 
						|
    We must parse that string into Objects which we do by calling
 | 
						|
    the `JSON.decode()` method from the `dart:convert` library.
 | 
						|
 | 
						|
block error-handling
 | 
						|
  //- TODO: describe `_handleError`?
 | 
						|
 | 
						|
block hlc-error-handling
 | 
						|
  :marked
 | 
						|
    Back in the `HeroListComponent`, we wrapped our call to
 | 
						|
    `!{_priv}heroService.getHeroes()` in a `try` clause. When an exception is
 | 
						|
    caught, the `errorMessage` variable — which we've bound conditionally in the
 | 
						|
    template — gets assigned to.
 | 
						|
 | 
						|
block hero-list-comp-add-hero
 | 
						|
  :marked
 | 
						|
    Back in the `HeroListComponent`, we see that *its* `addHero()`
 | 
						|
    awaits for the *service's* asynchronous `addHero()` to return, and when it does,
 | 
						|
    the new hero is added to the `heroes` list for presentation to the user.
 | 
						|
 | 
						|
block wikipedia-jsonp+
 | 
						|
  :marked
 | 
						|
    Wikipedia offers a modern `CORS` API and a legacy `JSONP` search API.
 | 
						|
  .alert.is-important
 | 
						|
    :marked
 | 
						|
      The remaining content of this section is coming soon.
 | 
						|
      In the meantime, consult the 
 | 
						|
      [example sources](https://github.com/angular-examples/server-communication)
 | 
						|
      to see how to access Wikipedia via its `JSONP` API.
 | 
						|
 | 
						|
block redirect-to-web-api
 | 
						|
  :marked
 | 
						|
    To achieve this, we have Angular inject an in-memory web API server
 | 
						|
    instance as a provider for the `BrowserClient`. This is possible because
 | 
						|
    the in-memory web API server class extends `BrowserClient`.
 |