extends ../../../ts/latest/tutorial/toh-pt6.jade block includes include ../_util-fns - var _Http = 'BrowserClient'; - var _Angular_Http = 'Dart BrowserClient' - var _httpUrl = 'https://pub.dartlang.org/packages/http' - var _Angular_http_library = 'Dart http package' - var _HTTP_PROVIDERS = 'BrowserClient' - var _JSON_stringify = 'JSON.encode' block start-server-and-watch :marked ### Keep the app compiling and running Open a terminal/console window. Start the Dart compiler, watch for changes, and start our server by entering the command: code-example(language="bash"). pub serve block http-library :marked We'll be using the !{_Angular_http_library}'s `BrowserClient` class to communicate with a server. ### Pubspec updates We need to add a package dependency for the !{_Angular_http_library}. We also need to add a `resolved_identifiers` entry, to inform the [angular2 transformer][ng2x] that we'll be using `BrowserClient`. (For an explanation of why this extra configuration is needed, see the [HTTP client chapter][guide-http].) We'll also need to use `Client` from http, so let's add that now as well. Update `pubspec.yaml` to look like this (additions are highlighted): [guide-http]: ../guide/server-communication.html#!#http-providers [ng2x]: https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer - var stylePattern = { pnk: /(http.*|resolved_identifiers:|Browser.*|Client.*)/gm }; +makeExcerpt('pubspec.yaml', 'additions', null, stylePattern) block http-providers :marked Before our app can use `#{_Http}`, we have to register it as a service provider. block backend :marked We want to replace `BrowserClient`, the service that talks to the remote server, with the in-memory web API service. Our in-memory web API service, shown below, is implemented using the `http` library `MockClient` class. All `http` client implementations share a common `Client` interface, so we'll have our app use the `Client` type so that we can freely switch between implementations. block dont-be-distracted-by-backend-subst //- N/A block get-heroes-details :marked To get the list of heroes, we first make an asynchronous call to `http.get()`. Then we use the `_extractData` helper method to decode the response payload (`body`). block hero-detail-comp-extra-imports-and-vars //- N/A block hero-detail-comp-updates :marked ### Edit in the *HeroDetailComponent* We already have `HeroDetailComponent` for viewing details about a specific hero. Supporting edit functionality is a natural extension of the detail view, so we are able to reuse `HeroDetailComponent` with a few tweaks. block hero-detail-comp-save-and-goback //- N/A block add-new-hero-via-detail-comp //- N/A block heroes-comp-directives //- N/A block heroes-comp-add //- N/A block review //- Not showing animated gif due to differences between TS and Dart implementations. block filetree .filetree .file angular2-tour-of-heroes .children .file lib .children .file app_component.dart .file app_component.css .file dashboard_component.css .file dashboard_component.html .file dashboard_component.dart .file hero.dart .file hero_detail_component.css .file hero_detail_component.html .file hero_detail_component.dart .file hero_service.dart .file heroes_component.css .file heroes_component.html .file heroes_component.dart .file main.dart .file in_memory_data_service.dart (new) .file web .children .file main.dart .file index.html .file sample.css (new) .file styles.css .file pubspec.yaml block file-summary +makeTabs( `toh-6/dart/lib/hero.dart, toh-6/dart/lib/hero_detail_component.dart, toh-6/dart/lib/hero_detail_component.html, toh-6/dart/lib/hero_service.dart, toh-6/dart/lib/heroes_component.dart, toh-6/dart/web/index.html, toh-6/dart/web/main.dart, toh-6/dart/web/sample.css`, `,,,,,,final,`, `lib/hero.dart, lib/hero_detail_component.dart, lib/hero_detail_component.html, lib/hero_service.dart, lib/heroes_component.dart, web/index.html, web/main.dart, web/sample.css`) +makeExample('pubspec.yaml')