parent
c445314239
commit
b43f8bc7d3
|
@ -2,7 +2,7 @@
|
||||||
import { Component, Input, OnDestroy } from '@angular/core';
|
import { Component, Input, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { MissionService } from './mission.service';
|
import { MissionService } from './mission.service';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-astronaut',
|
selector: 'app-astronaut',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MissionService {
|
export class MissionService {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero, HeroTaxReturn } from './hero';
|
import { Hero, HeroTaxReturn } from './hero';
|
||||||
import { HeroesService } from './heroes.service';
|
import { HeroesService } from './heroes.service';
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, Observer } from 'rxjs';
|
||||||
import { Observer } from 'rxjs/Observer';
|
|
||||||
|
|
||||||
import { Hero, HeroTaxReturn } from './hero';
|
import { Hero, HeroTaxReturn } from './hero';
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Villain, VillainsService } from './villains.service';
|
import { Villain, VillainsService } from './villains.service';
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { of } from 'rxjs/observable/of';
|
import { of } from 'rxjs';
|
||||||
|
|
||||||
export interface Villain { id: number; name: string; }
|
export interface Villain { id: number; name: string; }
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ export class ConfigComponent {
|
||||||
this.configService.getConfig()
|
this.configService.getConfig()
|
||||||
// #enddocregion v1, v2
|
// #enddocregion v1, v2
|
||||||
.subscribe(
|
.subscribe(
|
||||||
data => this.config = { ...data }, // success path
|
(data: Config) => this.config = { ...data }, // success path
|
||||||
error => this.error = error // error path
|
error => this.error = error // error path
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ export class ConfigComponent {
|
||||||
showConfig_v1() {
|
showConfig_v1() {
|
||||||
this.configService.getConfig_1()
|
this.configService.getConfig_1()
|
||||||
// #docregion v1, v1_callback
|
// #docregion v1, v1_callback
|
||||||
.subscribe(data => this.config = {
|
.subscribe((data: Config) => this.config = {
|
||||||
heroesUrl: data['heroesUrl'],
|
heroesUrl: data['heroesUrl'],
|
||||||
textfile: data['textfile']
|
textfile: data['textfile']
|
||||||
});
|
});
|
||||||
|
@ -51,7 +51,7 @@ export class ConfigComponent {
|
||||||
this.configService.getConfig()
|
this.configService.getConfig()
|
||||||
// #docregion v2, v2_callback
|
// #docregion v2, v2_callback
|
||||||
// clone the data object, using its known Config shape
|
// clone the data object, using its known Config shape
|
||||||
.subscribe(data => this.config = { ...data });
|
.subscribe((data: Config) => this.config = { ...data });
|
||||||
// #enddocregion v2_callback
|
// #enddocregion v2_callback
|
||||||
}
|
}
|
||||||
// #enddocregion v2
|
// #enddocregion v2
|
||||||
|
|
|
@ -6,8 +6,7 @@ import { HttpClient } from '@angular/common/http';
|
||||||
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
|
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
|
||||||
|
|
||||||
// #docregion rxjs-imports
|
// #docregion rxjs-imports
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, throwError } from 'rxjs';
|
||||||
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
|
|
||||||
import { catchError, retry } from 'rxjs/operators';
|
import { catchError, retry } from 'rxjs/operators';
|
||||||
// #enddocregion rxjs-imports
|
// #enddocregion rxjs-imports
|
||||||
|
|
||||||
|
@ -82,8 +81,8 @@ export class ConfigService {
|
||||||
`Backend returned code ${error.status}, ` +
|
`Backend returned code ${error.status}, ` +
|
||||||
`body was: ${error.error}`);
|
`body was: ${error.error}`);
|
||||||
}
|
}
|
||||||
// return an ErrorObservable with a user-facing error message
|
// return an observable with a user-facing error message
|
||||||
return new ErrorObservable(
|
return throwError(
|
||||||
'Something bad happened; please try again later.');
|
'Something bad happened; please try again later.');
|
||||||
};
|
};
|
||||||
// #enddocregion handleError
|
// #enddocregion handleError
|
||||||
|
|
|
@ -6,8 +6,7 @@ import { HttpHeaders } from '@angular/common/http';
|
||||||
|
|
||||||
// #enddocregion http-options
|
// #enddocregion http-options
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { catchError } from 'rxjs/operators';
|
import { catchError } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './hero';
|
import { Hero } from './hero';
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpErrorResponse } from '@angular/common/http';
|
import { HttpErrorResponse } from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
|
|
||||||
import { MessageService } from './message.service';
|
import { MessageService } from './message.service';
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@ import {
|
||||||
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
import { AuthService } from '../auth.service';
|
import { AuthService } from '../auth.service';
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,7 @@ import {
|
||||||
HttpInterceptor, HttpHandler
|
HttpInterceptor, HttpHandler
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { startWith, tap } from 'rxjs/operators';
|
import { startWith, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { RequestCache } from '../request-cache.service';
|
import { RequestCache } from '../request-cache.service';
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {
|
||||||
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class EnsureHttpsInterceptor implements HttpInterceptor {
|
export class EnsureHttpsInterceptor implements HttpInterceptor {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import {
|
||||||
HttpRequest, HttpResponse
|
HttpRequest, HttpResponse
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
// #docregion excerpt
|
// #docregion excerpt
|
||||||
import { finalize, tap } from 'rxjs/operators';
|
import { finalize, tap } from 'rxjs/operators';
|
||||||
import { MessageService } from '../message.service';
|
import { MessageService } from '../message.service';
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {
|
||||||
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
/** Pass untouched request through to the next request handler. */
|
/** Pass untouched request through to the next request handler. */
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {
|
||||||
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TrimNameInterceptor implements HttpInterceptor {
|
export class TrimNameInterceptor implements HttpInterceptor {
|
||||||
|
|
|
@ -5,8 +5,7 @@ import {
|
||||||
HttpEventType, HttpProgressEvent
|
HttpEventType, HttpProgressEvent
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
|
|
||||||
/** Simulate server replying to file upload request */
|
/** Simulate server replying to file upload request */
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, Subject } from 'rxjs';
|
||||||
import { Subject } from 'rxjs/Subject';
|
|
||||||
import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
|
import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { NpmPackageInfo, PackageSearchService } from './package-search.service';
|
import { NpmPackageInfo, PackageSearchService } from './package-search.service';
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { catchError, map } from 'rxjs/operators';
|
import { catchError, map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { HttpErrorHandler, HandleError } from '../http-error-handler.service';
|
import { HttpErrorHandler, HandleError } from '../http-error-handler.service';
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {
|
||||||
HttpRequest, HttpResponse, HttpErrorResponse
|
HttpRequest, HttpResponse, HttpErrorResponse
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
|
|
||||||
import { of } from 'rxjs/observable/of';
|
import { of } from 'rxjs';
|
||||||
import { catchError, last, map, tap } from 'rxjs/operators';
|
import { catchError, last, map, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { MessageService } from '../message.service';
|
import { MessageService } from '../message.service';
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
|
||||||
export class Contact {
|
export class Contact {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Crisis,
|
import { Crisis,
|
||||||
CrisisService } from './crisis.service';
|
CrisisService } from './crisis.service';
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
|
||||||
export class Crisis {
|
export class Crisis {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero,
|
import { Hero,
|
||||||
HeroService } from './hero.service';
|
HeroService } from './hero.service';
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
|
||||||
export class Hero {
|
export class Hero {
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
import { delay } from 'rxjs/operators';
|
||||||
import { delay } from 'rxjs/operator/delay';
|
|
||||||
|
|
||||||
export class Contact {
|
export class Contact {
|
||||||
constructor(public id: number, public name: string) { }
|
constructor(public id: number, public name: string) { }
|
||||||
|
@ -24,12 +23,12 @@ export class ContactService implements OnDestroy {
|
||||||
ngOnDestroy() { console.log('ContactService instance destroyed.'); }
|
ngOnDestroy() { console.log('ContactService instance destroyed.'); }
|
||||||
|
|
||||||
getContacts(): Observable<Contact[]> {
|
getContacts(): Observable<Contact[]> {
|
||||||
return delay.call(of(CONTACTS), FETCH_LATENCY);
|
return of(CONTACTS).pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
|
|
||||||
getContact(id: number | string): Observable<Contact> {
|
getContact(id: number | string): Observable<Contact> {
|
||||||
const contact$ = of(CONTACTS.find(contact => contact.id === +id));
|
const contact$ = of(CONTACTS.find(contact => contact.id === +id));
|
||||||
return delay.call(contact$, FETCH_LATENCY);
|
return contact$.pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Customer,
|
import { Customer,
|
||||||
CustomersService } from './customers.service';
|
CustomersService } from './customers.service';
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
import { delay } from 'rxjs/operators';
|
||||||
import { delay } from 'rxjs/operator/delay';
|
|
||||||
|
|
||||||
export class Customer {
|
export class Customer {
|
||||||
constructor(public id: number, public name: string) { }
|
constructor(public id: number, public name: string) { }
|
||||||
|
@ -27,11 +26,11 @@ export class CustomersService implements OnDestroy {
|
||||||
ngOnDestroy() { console.log('CustomersService instance destroyed.'); }
|
ngOnDestroy() { console.log('CustomersService instance destroyed.'); }
|
||||||
|
|
||||||
getCustomers(): Observable<Customer[]> {
|
getCustomers(): Observable<Customer[]> {
|
||||||
return delay.call(of(CUSTOMERS), FETCH_LATENCY);
|
return of(CUSTOMERS).pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
|
|
||||||
getCustomer(id: number | string): Observable<Customer> {
|
getCustomer(id: number | string): Observable<Customer> {
|
||||||
const customer$ = of(CUSTOMERS.find(customer => customer.id === +id));
|
const customer$ = of(CUSTOMERS.find(customer => customer.id === +id));
|
||||||
return delay.call(customer$, FETCH_LATENCY);
|
return customer$.pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable }from 'rxjs/Observable';
|
import { Observable }from 'rxjs';
|
||||||
|
|
||||||
import { Item,
|
import { Item,
|
||||||
ItemService } from './items.service';
|
ItemService } from './items.service';
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
import { ItemsComponent } from './items.component';
|
||||||
import { ItemsListComponent } from './items-list.component';
|
import { ItemsListComponent } from './items-list.component';
|
||||||
import { ItemsDetailComponent } from './items-detail.component';
|
import { ItemsDetailComponent } from './items-detail.component';
|
||||||
import { ItemService } from './items.service';
|
import { ItemService } from './items.service';
|
||||||
|
@ -8,7 +9,7 @@ import { ItemsRoutingModule } from './items-routing.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [ CommonModule, ItemsRoutingModule ],
|
imports: [ CommonModule, ItemsRoutingModule ],
|
||||||
declarations: [ ItemsDetailComponent, ItemsListComponent ],
|
declarations: [ ItemsComponent, ItemsDetailComponent, ItemsListComponent ],
|
||||||
providers: [ ItemService ]
|
providers: [ ItemService ]
|
||||||
})
|
})
|
||||||
export class ItemsModule {}
|
export class ItemsModule {}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable, OnDestroy } from '@angular/core';
|
import { Injectable, OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
import { delay } from 'rxjs/operators';
|
||||||
import { delay } from 'rxjs/operator/delay';
|
|
||||||
|
|
||||||
export class Item {
|
export class Item {
|
||||||
constructor(public id: number, public name: string) { }
|
constructor(public id: number, public name: string) { }
|
||||||
|
@ -25,12 +24,12 @@ export class ItemService implements OnDestroy {
|
||||||
ngOnDestroy() { console.log('ItemService instance destroyed.'); }
|
ngOnDestroy() { console.log('ItemService instance destroyed.'); }
|
||||||
|
|
||||||
getItems(): Observable<Item[]> {
|
getItems(): Observable<Item[]> {
|
||||||
return delay.call(of(ITEMS), FETCH_LATENCY);
|
return of(ITEMS).pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
|
|
||||||
getItem(id: number | string): Observable<Item> {
|
getItem(id: number | string): Observable<Item> {
|
||||||
const item$ = of(ITEMS.find(item => item.id === +id));
|
const item$ = of(ITEMS.find(item => item.id === +id));
|
||||||
return delay.call(item$, FETCH_LATENCY);
|
return item$.pipe(delay(FETCH_LATENCY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import { Component, Output, OnInit, EventEmitter, NgModule } from '@angular/core';
|
import { Component, Output, OnInit, EventEmitter, NgModule } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
// #docregion eventemitter
|
// #docregion eventemitter
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
// #docregion subscriber
|
// #docregion subscriber
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
// #docregion delay_sequence
|
// #docregion delay_sequence
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
// #docregion observer
|
// #docregion observer
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { HttpModule } from '@angular/http';
|
import { HttpClientModule } from '@angular//common/http';
|
||||||
|
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import {
|
import {
|
||||||
|
@ -26,7 +26,7 @@ import { ExponentialStrengthPipe } from './exponential-strength.pipe';
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
HttpModule
|
HttpClientModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
AppComponent,
|
AppComponent,
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Pipe, PipeTransform } from '@angular/core';
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
import { Http } from '@angular/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
|
|
||||||
// #docregion pipe-metadata
|
// #docregion pipe-metadata
|
||||||
@Pipe({
|
@Pipe({
|
||||||
name: 'fetch',
|
name: 'fetch',
|
||||||
|
@ -14,15 +11,13 @@ export class FetchJsonPipe implements PipeTransform {
|
||||||
private cachedData: any = null;
|
private cachedData: any = null;
|
||||||
private cachedUrl = '';
|
private cachedUrl = '';
|
||||||
|
|
||||||
constructor(private http: Http) { }
|
constructor(private http: HttpClient) { }
|
||||||
|
|
||||||
transform(url: string): any {
|
transform(url: string): any {
|
||||||
if (url !== this.cachedUrl) {
|
if (url !== this.cachedUrl) {
|
||||||
this.cachedData = null;
|
this.cachedData = null;
|
||||||
this.cachedUrl = url;
|
this.cachedUrl = url;
|
||||||
this.http.get(url)
|
this.http.get(url).subscribe( result => this.cachedData = result );
|
||||||
.map( result => result.json() )
|
|
||||||
.subscribe( result => this.cachedData = result );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.cachedData;
|
return this.cachedData;
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, interval } from 'rxjs';
|
||||||
import 'rxjs/add/observable/interval';
|
import { map, take } from 'rxjs/operators';
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
import 'rxjs/add/operator/take';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-hero-message',
|
selector: 'app-hero-message',
|
||||||
|
@ -25,14 +23,17 @@ export class HeroAsyncMessageComponent {
|
||||||
constructor() { this.resend(); }
|
constructor() { this.resend(); }
|
||||||
|
|
||||||
resend() {
|
resend() {
|
||||||
this.message$ = Observable.interval(500)
|
this.message$ = interval(500).pipe(
|
||||||
.map(i => this.messages[i])
|
map(i => this.messages[i]),
|
||||||
.take(this.messages.length);
|
take(this.messages.length)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// #enddocregion
|
// #enddocregion
|
||||||
|
|
||||||
// Alternative message$ formula:
|
// Alternative message$ formula:
|
||||||
// this.message$ = Observable.fromArray(this.messages)
|
// this.message$ = fromArray(this.messages).pipe(
|
||||||
// .map(message => Observable.timer(500).map(() => message))
|
// map(message => timer(500),
|
||||||
// .concatAll();
|
// map(() => message)),
|
||||||
|
// concatAll()
|
||||||
|
// );
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
|
|
||||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
import { pipe, range, timer, zip } from 'rxjs';
|
||||||
import { range } from 'rxjs/observable/range';
|
import { ajax } from 'rxjs/ajax';
|
||||||
import { timer } from 'rxjs/observable/timer';
|
import { retryWhen, map, mergeMap } from 'rxjs/operators';
|
||||||
import { pipe } from 'rxjs/util/pipe';
|
|
||||||
import { retryWhen, zip, map, mergeMap } from 'rxjs/operators';
|
|
||||||
|
|
||||||
function backoff(maxTries, ms) {
|
function backoff(maxTries, ms) {
|
||||||
return pipe(
|
return pipe(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import { fromEvent } from 'rxjs/observable/fromEvent';
|
import { fromEvent } from 'rxjs';
|
||||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
import { ajax } from 'rxjs/ajax';
|
||||||
import { map, filter, debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
|
import { map, filter, debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
const searchBox = document.getElementById('search-box');
|
const searchBox = document.getElementById('search-box');
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* tslint:disable:member-ordering */
|
/* tslint:disable:member-ordering */
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
import { finalize } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './data-model';
|
import { Hero } from './data-model';
|
||||||
import { HeroService } from './hero.service';
|
import { HeroService } from './hero.service';
|
||||||
|
@ -33,8 +34,9 @@ export class DemoComponent {
|
||||||
|
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
this.isLoading = true;
|
this.isLoading = true;
|
||||||
this.heroes = this.heroService.getHeroes()
|
this.heroes = this.heroService.getHeroes().pipe(
|
||||||
.finally(() => this.isLoading = false);
|
finalize(() => this.isLoading = false)
|
||||||
|
);
|
||||||
this.selectedHero = undefined;
|
this.selectedHero = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import 'rxjs/add/operator/finally';
|
import { finalize } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from '../data-model';
|
import { Hero } from '../data-model';
|
||||||
import { HeroService } from '../hero.service';
|
import { HeroService } from '../hero.service';
|
||||||
|
@ -24,7 +24,7 @@ export class HeroListComponent implements OnInit {
|
||||||
this.isLoading = true;
|
this.isLoading = true;
|
||||||
this.heroes = this.heroService.getHeroes()
|
this.heroes = this.heroService.getHeroes()
|
||||||
// Todo: error handling
|
// Todo: error handling
|
||||||
.finally(() => this.isLoading = false);
|
.pipe(finalize(() => this.isLoading = false));
|
||||||
this.selectedHero = undefined;
|
this.selectedHero = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
import { delay } from 'rxjs/operators';
|
||||||
import 'rxjs/add/operator/delay';
|
|
||||||
|
|
||||||
import { Hero, heroes } from './data-model';
|
import { Hero, heroes } from './data-model';
|
||||||
|
|
||||||
|
@ -14,13 +13,13 @@ export class HeroService {
|
||||||
|
|
||||||
// Fake server get; assume nothing can go wrong
|
// Fake server get; assume nothing can go wrong
|
||||||
getHeroes(): Observable<Hero[]> {
|
getHeroes(): Observable<Hero[]> {
|
||||||
return of(heroes).delay(this.delayMs); // simulate latency with delay
|
return of(heroes).pipe(delay(this.delayMs)); // simulate latency with delay
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fake server update; assume nothing can go wrong
|
// Fake server update; assume nothing can go wrong
|
||||||
updateHero(hero: Hero): Observable<Hero> {
|
updateHero(hero: Hero): Observable<Hero> {
|
||||||
const oldHero = heroes.find(h => h.id === hero.id);
|
const oldHero = heroes.find(h => h.id === hero.id);
|
||||||
const newHero = Object.assign(oldHero, hero); // Demo: mutate cached hero
|
const newHero = Object.assign(oldHero, hero); // Demo: mutate cached hero
|
||||||
return of(newHero).delay(this.delayMs); // simulate latency with delay
|
return of(newHero).pipe(delay(this.delayMs)); // simulate latency with delay
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import 'rxjs/add/operator/map';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
template: `
|
template: `
|
||||||
|
@ -23,11 +23,11 @@ export class AdminDashboardComponent implements OnInit {
|
||||||
// Capture the session ID if available
|
// Capture the session ID if available
|
||||||
this.sessionId = this.route
|
this.sessionId = this.route
|
||||||
.queryParamMap
|
.queryParamMap
|
||||||
.map(params => params.get('session_id') || 'None');
|
.pipe(map(params => params.get('session_id') || 'None'));
|
||||||
|
|
||||||
// Capture the fragment if available
|
// Capture the fragment if available
|
||||||
this.token = this.route
|
this.token = this.route
|
||||||
.fragment
|
.fragment
|
||||||
.map(fragment => fragment || 'None');
|
.pipe(map(fragment => fragment || 'None'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { SelectivePreloadingStrategy } from '../selective-preloading-strategy';
|
import { SelectivePreloadingStrategy } from '../selective-preloading-strategy';
|
||||||
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
template: `
|
template: `
|
||||||
|
@ -37,11 +37,11 @@ export class AdminDashboardComponent implements OnInit {
|
||||||
// Capture the session ID if available
|
// Capture the session ID if available
|
||||||
this.sessionId = this.route
|
this.sessionId = this.route
|
||||||
.queryParamMap
|
.queryParamMap
|
||||||
.map(params => params.get('session_id') || 'None');
|
.pipe(map(params => params.get('session_id') || 'None'));
|
||||||
|
|
||||||
// Capture the fragment if available
|
// Capture the fragment if available
|
||||||
this.token = this.route
|
this.token = this.route
|
||||||
.fragment
|
.fragment
|
||||||
.map(fragment => fragment || 'None');
|
.pipe(map(fragment => fragment || 'None'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
import { tap, delay } from 'rxjs/operators';
|
||||||
import 'rxjs/add/operator/do';
|
|
||||||
import 'rxjs/add/operator/delay';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AuthService {
|
export class AuthService {
|
||||||
|
@ -14,7 +12,10 @@ export class AuthService {
|
||||||
redirectUrl: string;
|
redirectUrl: string;
|
||||||
|
|
||||||
login(): Observable<boolean> {
|
login(): Observable<boolean> {
|
||||||
return Observable.of(true).delay(1000).do(val => this.isLoggedIn = true);
|
return of(true).pipe(
|
||||||
|
delay(1000),
|
||||||
|
tap(val => this.isLoggedIn = true)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
logout(): void {
|
logout(): void {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { CanDeactivate,
|
import { CanDeactivate,
|
||||||
ActivatedRouteSnapshot,
|
ActivatedRouteSnapshot,
|
||||||
RouterStateSnapshot } from '@angular/router';
|
RouterStateSnapshot } from '@angular/router';
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CanDeactivate } from '@angular/router';
|
import { CanDeactivate } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
export interface CanComponentDeactivate {
|
export interface CanComponentDeactivate {
|
||||||
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
|
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
import 'rxjs/add/operator/take';
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
import { Router, Resolve, RouterStateSnapshot,
|
import { Router, Resolve, RouterStateSnapshot,
|
||||||
ActivatedRouteSnapshot } from '@angular/router';
|
ActivatedRouteSnapshot } from '@angular/router';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { map, take } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Crisis, CrisisService } from './crisis.service';
|
import { Crisis, CrisisService } from './crisis.service';
|
||||||
|
|
||||||
|
@ -15,13 +14,16 @@ export class CrisisDetailResolver implements Resolve<Crisis> {
|
||||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Crisis> {
|
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Crisis> {
|
||||||
let id = route.paramMap.get('id');
|
let id = route.paramMap.get('id');
|
||||||
|
|
||||||
return this.cs.getCrisis(id).take(1).map(crisis => {
|
return this.cs.getCrisis(id).pipe(
|
||||||
|
take(1),
|
||||||
|
map(crisis => {
|
||||||
if (crisis) {
|
if (crisis) {
|
||||||
return crisis;
|
return crisis;
|
||||||
} else { // id not found
|
} else { // id not found
|
||||||
this.router.navigate(['/crisis-center']);
|
this.router.navigate(['/crisis-center']);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/operator/switchMap';
|
|
||||||
import { Component, OnInit, HostBinding } from '@angular/core';
|
import { Component, OnInit, HostBinding } from '@angular/core';
|
||||||
import { ActivatedRoute, Router, ParamMap } from '@angular/router';
|
import { ActivatedRoute, Router, ParamMap } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
import { switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { slideInDownAnimation } from '../animations';
|
import { slideInDownAnimation } from '../animations';
|
||||||
import { Crisis, CrisisService } from './crisis.service';
|
import { Crisis, CrisisService } from './crisis.service';
|
||||||
|
@ -46,8 +46,9 @@ export class CrisisDetailComponent implements OnInit {
|
||||||
// #docregion ngOnInit
|
// #docregion ngOnInit
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.paramMap
|
this.route.paramMap
|
||||||
.switchMap((params: ParamMap) =>
|
.pipe(
|
||||||
this.service.getCrisis(params.get('id')))
|
switchMap((params: ParamMap) =>
|
||||||
|
this.service.getCrisis(params.get('id'))))
|
||||||
.subscribe((crisis: Crisis) => {
|
.subscribe((crisis: Crisis) => {
|
||||||
if (crisis) {
|
if (crisis) {
|
||||||
this.editName = crisis.name;
|
this.editName = crisis.name;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit, HostBinding } from '@angular/core';
|
import { Component, OnInit, HostBinding } from '@angular/core';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { slideInDownAnimation } from '../animations';
|
import { slideInDownAnimation } from '../animations';
|
||||||
import { Crisis } from './crisis.service';
|
import { Crisis } from './crisis.service';
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
|
||||||
import 'rxjs/add/operator/switchMap';
|
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute, ParamMap } from '@angular/router';
|
import { ActivatedRoute, ParamMap } from '@angular/router';
|
||||||
|
|
||||||
import { Crisis, CrisisService } from './crisis.service';
|
import { Crisis, CrisisService } from './crisis.service';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
import { switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
// #docregion relative-navigation-router-link
|
// #docregion relative-navigation-router-link
|
||||||
|
@ -34,10 +34,11 @@ export class CrisisListComponent implements OnInit {
|
||||||
|
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.crises$ = this.route.paramMap
|
this.crises$ = this.route.paramMap.pipe(
|
||||||
.switchMap((params: ParamMap) => {
|
switchMap((params: ParamMap) => {
|
||||||
this.selectedId = +params.get('id');
|
this.selectedId = +params.get('id');
|
||||||
return this.service.getCrises();
|
return this.service.getCrises();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/operator/switchMap';
|
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute, ParamMap } from '@angular/router';
|
import { ActivatedRoute, ParamMap } from '@angular/router';
|
||||||
|
|
||||||
import { Crisis, CrisisService } from './crisis.service';
|
import { Crisis, CrisisService } from './crisis.service';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
import { switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
template: `
|
template: `
|
||||||
|
@ -32,10 +32,11 @@ export class CrisisListComponent implements OnInit {
|
||||||
// #enddocregion ctor
|
// #enddocregion ctor
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.crises$ = this.route.paramMap
|
this.crises$ = this.route.paramMap.pipe(
|
||||||
.switchMap((params: ParamMap) => {
|
switchMap((params: ParamMap) => {
|
||||||
this.selectedId = +params.get('id');
|
this.selectedId = +params.get('id');
|
||||||
return this.service.getCrises();
|
return this.service.getCrises();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion , mock-crises
|
// #docregion , mock-crises
|
||||||
import 'rxjs/add/observable/of';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
import 'rxjs/add/operator/map';
|
import { map } from 'rxjs/operators';
|
||||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
|
||||||
|
|
||||||
export class Crisis {
|
export class Crisis {
|
||||||
constructor(public id: number, public name: string) { }
|
constructor(public id: number, public name: string) { }
|
||||||
|
@ -26,8 +25,9 @@ export class CrisisService {
|
||||||
getCrises() { return this.crises$; }
|
getCrises() { return this.crises$; }
|
||||||
|
|
||||||
getCrisis(id: number | string) {
|
getCrisis(id: number | string) {
|
||||||
return this.getCrises()
|
return this.getCrises().pipe(
|
||||||
.map(crises => crises.find(crisis => crisis.id === +id));
|
map(crises => crises.find(crisis => crisis.id === +id))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// #enddocregion
|
// #enddocregion
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Async modal dialog service
|
* Async modal dialog service
|
||||||
|
@ -17,6 +16,6 @@ export class DialogService {
|
||||||
confirm(message?: string): Observable<boolean> {
|
confirm(message?: string): Observable<boolean> {
|
||||||
const confirmation = window.confirm(message || 'Is it OK?');
|
const confirmation = window.confirm(message || 'Is it OK?');
|
||||||
|
|
||||||
return Observable.of(confirmation);
|
return of(confirmation);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion
|
// #docregion
|
||||||
// #docregion rxjs-operator-import
|
// #docregion rxjs-operator-import
|
||||||
import 'rxjs/add/operator/switchMap';
|
import { switchMap } from 'rxjs/operators';
|
||||||
// #enddocregion rxjs-operator-import
|
// #enddocregion rxjs-operator-import
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
// #docregion imports
|
// #docregion imports
|
||||||
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
|
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
|
||||||
// #enddocregion imports
|
// #enddocregion imports
|
||||||
|
@ -41,9 +41,10 @@ export class HeroDetailComponent implements OnInit {
|
||||||
|
|
||||||
// #docregion ngOnInit
|
// #docregion ngOnInit
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.hero$ = this.route.paramMap
|
this.hero$ = this.route.paramMap.pipe(
|
||||||
.switchMap((params: ParamMap) =>
|
switchMap((params: ParamMap) =>
|
||||||
this.service.getHero(params.get('id')));
|
this.service.getHero(params.get('id')))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// #enddocregion ngOnInit
|
// #enddocregion ngOnInit
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero, HeroService } from './hero.service';
|
import { Hero, HeroService } from './hero.service';
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion
|
// #docregion
|
||||||
// #docregion rxjs-operator-import
|
// #docregion rxjs-operator-import
|
||||||
import 'rxjs/add/operator/switchMap';
|
import { switchMap } from 'rxjs/operators';
|
||||||
// #enddocregion rxjs-operator-import
|
// #enddocregion rxjs-operator-import
|
||||||
import { Component, OnInit, HostBinding } from '@angular/core';
|
import { Component, OnInit, HostBinding } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
|
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { slideInDownAnimation } from '../animations';
|
import { slideInDownAnimation } from '../animations';
|
||||||
|
|
||||||
|
@ -48,9 +48,10 @@ export class HeroDetailComponent implements OnInit {
|
||||||
|
|
||||||
// #docregion ngOnInit
|
// #docregion ngOnInit
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.hero$ = this.route.paramMap
|
this.hero$ = this.route.paramMap.pipe(
|
||||||
.switchMap((params: ParamMap) =>
|
switchMap((params: ParamMap) =>
|
||||||
this.service.getHero(params.get('id')));
|
this.service.getHero(params.get('id')))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// #enddocregion ngOnInit
|
// #enddocregion ngOnInit
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// TODO SOMEDAY: Feature Componetized like HeroCenter
|
// TODO SOMEDAY: Feature Componetized like HeroCenter
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero, HeroService } from './hero.service';
|
import { Hero, HeroService } from './hero.service';
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
// TODO SOMEDAY: Feature Componetized like CrisisCenter
|
// TODO SOMEDAY: Feature Componetized like CrisisCenter
|
||||||
// #docregion rxjs-imports
|
// #docregion rxjs-imports
|
||||||
import 'rxjs/add/operator/switchMap';
|
import { Observable } from 'rxjs';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { switchMap } from 'rxjs/operators';
|
||||||
// #enddocregion rxjs-imports
|
// #enddocregion rxjs-imports
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
// #docregion import-router
|
// #docregion import-router
|
||||||
|
@ -41,12 +41,13 @@ export class HeroListComponent implements OnInit {
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.heroes$ = this.route.paramMap
|
this.heroes$ = this.route.paramMap.pipe(
|
||||||
.switchMap((params: ParamMap) => {
|
switchMap((params: ParamMap) => {
|
||||||
// (+) before `params.get()` turns the string into a number
|
// (+) before `params.get()` turns the string into a number
|
||||||
this.selectedId = +params.get('id');
|
this.selectedId = +params.get('id');
|
||||||
return this.service.getHeroes();
|
return this.service.getHeroes();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// #enddocregion ctor
|
// #enddocregion ctor
|
||||||
// #docregion ctor
|
// #docregion ctor
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
export class Hero {
|
export class Hero {
|
||||||
constructor(public id: number, public name: string) { }
|
constructor(public id: number, public name: string) { }
|
||||||
|
@ -19,11 +18,12 @@ const HEROES = [
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class HeroService {
|
export class HeroService {
|
||||||
getHeroes() { return Observable.of(HEROES); }
|
getHeroes() { return of(HEROES); }
|
||||||
|
|
||||||
getHero(id: number | string) {
|
getHero(id: number | string) {
|
||||||
return this.getHeroes()
|
return this.getHeroes().pipe(
|
||||||
// (+) before `id` turns the string into a number
|
// (+) before `id` turns the string into a number
|
||||||
.map(heroes => heroes.find(hero => hero.id === +id));
|
map(heroes => heroes.find(hero => hero.id === +id))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { PreloadingStrategy, Route } from '@angular/router';
|
import { PreloadingStrategy, Route } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SelectivePreloadingStrategy implements PreloadingStrategy {
|
export class SelectivePreloadingStrategy implements PreloadingStrategy {
|
||||||
|
@ -18,7 +17,7 @@ export class SelectivePreloadingStrategy implements PreloadingStrategy {
|
||||||
|
|
||||||
return load();
|
return load();
|
||||||
} else {
|
} else {
|
||||||
return Observable.of(null);
|
return of(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
import { ajax } from 'rxjs/ajax';
|
||||||
import { map, catchError } from 'rxjs/operators';
|
import { map, catchError } from 'rxjs/operators';
|
||||||
// Return "response" from the API. If an error happens,
|
// Return "response" from the API. If an error happens,
|
||||||
// return an empty array.
|
// return an empty array.
|
||||||
|
@ -15,7 +14,7 @@ const apiData = ajax('/api/data').pipe(
|
||||||
}
|
}
|
||||||
return res.response;
|
return res.response;
|
||||||
}),
|
}),
|
||||||
catchError(err => Observable.of([]))
|
catchError(err => of([]))
|
||||||
);
|
);
|
||||||
|
|
||||||
apiData.subscribe({
|
apiData.subscribe({
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-stopwatch',
|
selector: 'app-stopwatch',
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of, pipe } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
import { pipe } from 'rxjs/util/pipe';
|
|
||||||
import { filter, map } from 'rxjs/operators';
|
import { filter, map } from 'rxjs/operators';
|
||||||
|
|
||||||
const nums = Observable.of(1, 2, 3, 4, 5);
|
const nums = of(1, 2, 3, 4, 5);
|
||||||
|
|
||||||
// Create a function that accepts an Observable.
|
// Create a function that accepts an Observable.
|
||||||
const squareOddVals = pipe(
|
const squareOddVals = pipe(
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
import { filter } from 'rxjs/operators/filter';
|
import { filter, map } from 'rxjs/operators';
|
||||||
import { map } from 'rxjs/operators/map';
|
|
||||||
|
|
||||||
const squareOdd = Observable.of(1, 2, 3, 4, 5)
|
const squareOdd = of(1, 2, 3, 4, 5)
|
||||||
.pipe(
|
.pipe(
|
||||||
filter(n => n % 2),
|
filter(n => n % 2),
|
||||||
map(n => n * n)
|
map(n => n * n)
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
const nums = Observable.of(1, 2, 3);
|
const nums = of(1, 2, 3);
|
||||||
|
|
||||||
const squareValues = map((val: number) => val * val);
|
const squareValues = map((val: number) => val * val);
|
||||||
const squaredNums = squareValues(nums);
|
const squaredNums = squareValues(nums);
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
|
|
||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
import { ajax } from 'rxjs/ajax';
|
||||||
import { map, retry, catchError } from 'rxjs/operators';
|
import { map, retry, catchError } from 'rxjs/operators';
|
||||||
|
|
||||||
const apiData = ajax('/api/data').pipe(
|
const apiData = ajax('/api/data').pipe(
|
||||||
|
@ -16,7 +15,7 @@ const apiData = ajax('/api/data').pipe(
|
||||||
}
|
}
|
||||||
return res.response;
|
return res.response;
|
||||||
}),
|
}),
|
||||||
catchError(err => Observable.of([]))
|
catchError(err => of([]))
|
||||||
);
|
);
|
||||||
|
|
||||||
apiData.subscribe({
|
apiData.subscribe({
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// #docregion promise
|
// #docregion promise
|
||||||
|
|
||||||
import { fromPromise } from 'rxjs/observable/fromPromise';
|
import { fromPromise } from 'rxjs';
|
||||||
|
|
||||||
// Create an Observable out of a promise
|
// Create an Observable out of a promise
|
||||||
const data = fromPromise(fetch('/api/endpoint'));
|
const data = fromPromise(fetch('/api/endpoint'));
|
||||||
|
@ -16,7 +16,7 @@ data.subscribe({
|
||||||
|
|
||||||
// #docregion interval
|
// #docregion interval
|
||||||
|
|
||||||
import { interval } from 'rxjs/observable/interval';
|
import { interval } from 'rxjs';
|
||||||
|
|
||||||
// Create an Observable that will publish a value on an interval
|
// Create an Observable that will publish a value on an interval
|
||||||
const secondsCounter = interval(1000);
|
const secondsCounter = interval(1000);
|
||||||
|
@ -29,7 +29,7 @@ secondsCounter.subscribe(n =>
|
||||||
|
|
||||||
// #docregion event
|
// #docregion event
|
||||||
|
|
||||||
import { fromEvent } from 'rxjs/observable/fromEvent';
|
import { fromEvent } from 'rxjs';
|
||||||
|
|
||||||
const el = document.getElementById('my-element');
|
const el = document.getElementById('my-element');
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ const subscription = mouseMoves.subscribe((evt: MouseEvent) => {
|
||||||
|
|
||||||
// #docregion ajax
|
// #docregion ajax
|
||||||
|
|
||||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
import { ajax } from 'rxjs/ajax';
|
||||||
|
|
||||||
// Create an Observable that will create an AJAX request
|
// Create an Observable that will create an AJAX request
|
||||||
const apiData = ajax('/api/data');
|
const apiData = ajax('/api/data');
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { SwUpdate } from '@angular/service-worker';
|
||||||
|
|
||||||
|
|
||||||
// #docregion sw-check-update
|
// #docregion sw-check-update
|
||||||
import { interval } from 'rxjs/observable/interval';
|
import { interval } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CheckForUpdateService {
|
export class CheckForUpdateService {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
import { ExceptionService, SpinnerService, ToastService } from '../../core';
|
import { ExceptionService, SpinnerService, ToastService } from '../../core';
|
||||||
import { Http } from '@angular/http';
|
import { Http } from '@angular/http';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
// #enddocregion example
|
// #enddocregion example
|
||||||
|
|
||||||
|
@ -19,13 +20,13 @@ export class HeroService {
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
getHero(id: number) {
|
getHero(id: number) {
|
||||||
return this.http.get(`api/heroes/${id}`)
|
return this.http.get(`api/heroes/${id}`).pipe(
|
||||||
.map(response => response.json().data as Hero);
|
map(response => response.json().data as Hero));
|
||||||
}
|
}
|
||||||
|
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
return this.http.get(`api/heroes`)
|
return this.http.get(`api/heroes`).pipe(
|
||||||
.map(response => response.json().data as Hero[]);
|
map(response => response.json().data as Hero[]));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// #docregion example
|
// #docregion example
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Http } from '@angular/http';
|
import { Http } from '@angular/http';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
import { ExceptionService, SpinnerService, ToastService } from '../../core';
|
import { ExceptionService, SpinnerService, ToastService } from '../../core';
|
||||||
|
@ -19,13 +20,13 @@ export class HeroService {
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
getHero(id: number) {
|
getHero(id: number) {
|
||||||
return this.http.get(`api/heroes/${id}`)
|
return this.http.get(`api/heroes/${id}`).pipe(
|
||||||
.map(response => response.json() as Hero);
|
map(response => response.json() as Hero));
|
||||||
}
|
}
|
||||||
|
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
return this.http.get(`api/heroes`)
|
return this.http.get(`api/heroes`).pipe(
|
||||||
.map(response => response.json() as Hero[]);
|
map(response => response.json() as Hero[]));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs';
|
||||||
|
|
||||||
import { LoggerService } from '../logger.service';
|
import { LoggerService } from '../logger.service';
|
||||||
import { SpinnerState, SpinnerService } from './spinner.service';
|
import { SpinnerState, SpinnerService } from './spinner.service';
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
export interface SpinnerState {
|
export interface SpinnerState {
|
||||||
show: boolean;
|
show: boolean;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero, HeroService } from './shared';
|
import { Hero, HeroService } from './shared';
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero, HeroService } from './shared';
|
import { Hero, HeroService } from './shared';
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Http } from '@angular/http';
|
import { Http } from '@angular/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import 'rxjs/add/operator/map';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
|
|
||||||
|
@ -12,7 +12,8 @@ export class HeroService {
|
||||||
constructor(private http: Http) {}
|
constructor(private http: Http) {}
|
||||||
|
|
||||||
getHeroes(): Observable<Hero[]> {
|
getHeroes(): Observable<Hero[]> {
|
||||||
return this.http.get('api/heroes')
|
return this.http.get('api/heroes').pipe(
|
||||||
.map(resp => resp.json().data as Hero[]);
|
map(resp => resp.json().data as Hero[])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,8 @@
|
||||||
import { OnInit } from '@angular/core';
|
import { OnInit } from '@angular/core';
|
||||||
import { Http, Response } from '@angular/http';
|
import { Http, Response } from '@angular/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import 'rxjs/add/operator/catch';
|
import { catchError, finalize, map } from 'rxjs/operators';
|
||||||
import 'rxjs/add/operator/finally';
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
|
|
||||||
import { Hero } from '../shared/hero.model';
|
import { Hero } from '../shared/hero.model';
|
||||||
|
|
||||||
|
@ -18,11 +16,11 @@ export class HeroListComponent implements OnInit {
|
||||||
constructor(private http: Http) {}
|
constructor(private http: Http) {}
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
this.heroes = [];
|
this.heroes = [];
|
||||||
this.http.get(heroesUrl)
|
this.http.get(heroesUrl).pipe(
|
||||||
.map((response: Response) => <Hero[]>response.json().data)
|
map((response: Response) => <Hero[]>response.json().data),
|
||||||
.catch(this.catchBadResponse)
|
catchError(this.catchBadResponse),
|
||||||
.finally(() => this.hideSpinner())
|
finalize(() => this.hideSpinner())
|
||||||
.subscribe((heroes: Hero[]) => this.heroes = heroes);
|
).subscribe((heroes: Hero[]) => this.heroes = heroes);
|
||||||
}
|
}
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.getHeroes();
|
this.getHeroes();
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
|
|
||||||
|
@ -10,6 +9,6 @@ import { Hero } from './hero.model';
|
||||||
export class HeroService {
|
export class HeroService {
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
let heroes: Hero[] = [];
|
let heroes: Hero[] = [];
|
||||||
return Observable.of(heroes);
|
return of(heroes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Http, Response } from '@angular/http';
|
import { Http, Response } from '@angular/http';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
|
|
||||||
|
@ -10,8 +11,8 @@ export class HeroService {
|
||||||
constructor(private http: Http) { }
|
constructor(private http: Http) { }
|
||||||
|
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
return this.http.get('api/heroes')
|
return this.http.get('api/heroes').pipe(
|
||||||
.map((response: Response) => <Hero[]>response.json());
|
map((response: Response) => <Hero[]>response.json()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// #enddocregion example
|
// #enddocregion example
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
|
|
||||||
|
@ -10,6 +9,6 @@ import { Hero } from './hero.model';
|
||||||
export class HeroService {
|
export class HeroService {
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
let heroes: Hero[] = [];
|
let heroes: Hero[] = [];
|
||||||
return Observable.of(heroes);
|
return of(heroes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of } from 'rxjs';
|
||||||
import 'rxjs/add/observable/of';
|
|
||||||
|
|
||||||
import { Hero } from './hero.model';
|
import { Hero } from './hero.model';
|
||||||
|
|
||||||
|
@ -10,6 +9,6 @@ import { Hero } from './hero.model';
|
||||||
export class HeroService {
|
export class HeroService {
|
||||||
getHeroes() {
|
getHeroes() {
|
||||||
let heroes: Hero[] = [];
|
let heroes: Hero[] = [];
|
||||||
return Observable.of(heroes);
|
return of(heroes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
import { AppModule } from './app/app.module';
|
import { AppModule } from './app/app.module';
|
||||||
|
|
||||||
import 'rxjs/add/operator/map';
|
|
||||||
|
|
||||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// tslint:disable-next-line:no-unused-variable
|
// tslint:disable-next-line:no-unused-variable
|
||||||
import { async, fakeAsync, tick } from '@angular/core/testing';
|
import { async, fakeAsync, tick } from '@angular/core/testing';
|
||||||
|
|
||||||
import { of } from 'rxjs/observable/of';
|
import { of } from 'rxjs';
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
|
||||||
describe('Angular async helper', () => {
|
describe('Angular async helper', () => {
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { Component, ContentChildren, Directive, EventEmitter,
|
||||||
Pipe, PipeTransform,
|
Pipe, PipeTransform,
|
||||||
SimpleChange } from '@angular/core';
|
SimpleChange } from '@angular/core';
|
||||||
|
|
||||||
import { of } from 'rxjs/observable/of';
|
import { of } from 'rxjs';
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
|
||||||
////////// The App: Services and Components for the tests. //////////////
|
////////// The App: Services and Components for the tests. //////////////
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from '../model/hero';
|
import { Hero } from '../model/hero';
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Hero } from '../model/hero';
|
import { Hero } from '../model/hero';
|
||||||
import { HeroService } from '../model/hero.service';
|
import { HeroService } from '../model/hero.service';
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
|
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { catchError, map, tap } from 'rxjs/operators';
|
import { catchError, map, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Hero } from './hero';
|
import { Hero } from './hero';
|
||||||
|
|
|
@ -14,9 +14,7 @@ import {
|
||||||
HttpModule, Http, XHRBackend, Response, ResponseOptions
|
HttpModule, Http, XHRBackend, Response, ResponseOptions
|
||||||
} from '@angular/http';
|
} from '@angular/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { catchError, tap } from 'rxjs/operators';
|
|
||||||
|
|
||||||
import { Hero } from './hero';
|
import { Hero } from './hero';
|
||||||
import { HttpHeroService } from './http-hero.service';
|
import { HttpHeroService } from './http-hero.service';
|
||||||
|
|
|
@ -6,9 +6,9 @@ import { Http, Response } from '@angular/http';
|
||||||
import { Headers, RequestOptions } from '@angular/http';
|
import { Headers, RequestOptions } from '@angular/http';
|
||||||
import { Hero } from './hero';
|
import { Hero } from './hero';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
|
import { throwError } from 'rxjs';
|
||||||
import { catchError, map, tap } from 'rxjs/operators';
|
import { catchError, map } from 'rxjs/operators';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class HttpHeroService {
|
export class HttpHeroService {
|
||||||
|
@ -64,6 +64,6 @@ export class HttpHeroService {
|
||||||
// In a real world app, we might send the error to remote logging infrastructure
|
// In a real world app, we might send the error to remote logging infrastructure
|
||||||
let errMsg = error.message || 'Server error';
|
let errMsg = error.message || 'Server error';
|
||||||
console.error(errMsg); // log to console instead
|
console.error(errMsg); // log to console instead
|
||||||
return new ErrorObservable(errMsg);
|
return throwError(errMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
import { asyncData } from '../../../testing';
|
import { asyncData } from '../../../testing';
|
||||||
|
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
|
@ -5,12 +5,6 @@ import { async, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core
|
||||||
import { cold, getTestScheduler } from 'jasmine-marbles';
|
import { cold, getTestScheduler } from 'jasmine-marbles';
|
||||||
// #enddocregion import-marbles
|
// #enddocregion import-marbles
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
|
|
||||||
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
|
|
||||||
import { last } from 'rxjs/operators';
|
|
||||||
|
|
||||||
import { TwainService } from './twain.service';
|
import { TwainService } from './twain.service';
|
||||||
import { TwainComponent } from './twain.component';
|
import { TwainComponent } from './twain.component';
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,8 @@ import { async, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core
|
||||||
|
|
||||||
import { asyncData, asyncError } from '../../testing';
|
import { asyncData, asyncError } from '../../testing';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { of, throwError } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
|
|
||||||
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
|
|
||||||
import { last } from 'rxjs/operators';
|
import { last } from 'rxjs/operators';
|
||||||
|
|
||||||
import { TwainService } from './twain.service';
|
import { TwainService } from './twain.service';
|
||||||
|
@ -75,7 +73,7 @@ describe('TwainComponent', () => {
|
||||||
it('should display error when TwainService fails', fakeAsync(() => {
|
it('should display error when TwainService fails', fakeAsync(() => {
|
||||||
// tell spy to return an error observable
|
// tell spy to return an error observable
|
||||||
getQuoteSpy.and.returnValue(
|
getQuoteSpy.and.returnValue(
|
||||||
new ErrorObservable('TwainService test failure'));
|
throwError('TwainService test failure'));
|
||||||
|
|
||||||
fixture.detectChanges(); // onInit()
|
fixture.detectChanges(); // onInit()
|
||||||
// sync spy errors immediately after init
|
// sync spy errors immediately after init
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// #docregion
|
// #docregion
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { catchError, startWith } from 'rxjs/operators';
|
import { catchError, startWith } from 'rxjs/operators';
|
||||||
|
|
||||||
import { TwainService } from './twain.service';
|
import { TwainService } from './twain.service';
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
||||||
|
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of, throwError } from 'rxjs';
|
||||||
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
|
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
import { concat, map, retryWhen, switchMap, take, tap } from 'rxjs/operators';
|
import { concat, map, retryWhen, switchMap, take, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { Quote } from './quote';
|
import { Quote } from './quote';
|
||||||
|
@ -35,11 +33,11 @@ export class TwainService {
|
||||||
}
|
}
|
||||||
// Some other HTTP error.
|
// Some other HTTP error.
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return new ErrorObservable('Cannot get Twain quotes from the server');
|
return throwError('Cannot get Twain quotes from the server');
|
||||||
}),
|
}),
|
||||||
take(2),
|
take(2),
|
||||||
// If a second retry value, then didn't find id:1 and triggers the following error
|
// If a second retry value, then didn't find id:1 and triggers the following error
|
||||||
concat(new ErrorObservable('There are no Twain quotes')) // didn't find id:1
|
concat(throwError('There are no Twain quotes')) // didn't find id:1
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
export { ActivatedRoute } from '@angular/router';
|
export { ActivatedRoute } from '@angular/router';
|
||||||
|
|
||||||
// #docregion activated-route-stub
|
// #docregion activated-route-stub
|
||||||
import { ReplaySubject } from 'rxjs/ReplaySubject';
|
|
||||||
import { convertToParamMap, ParamMap, Params } from '@angular/router';
|
import { convertToParamMap, ParamMap, Params } from '@angular/router';
|
||||||
|
import { ReplaySubject } from 'rxjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An ActivateRoute test double with a `paramMap` observable.
|
* An ActivateRoute test double with a `paramMap` observable.
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
*
|
*
|
||||||
* Using `asap` scheduler - as in `of(value, asap)` - doesn't work either.
|
* Using `asap` scheduler - as in `of(value, asap)` - doesn't work either.
|
||||||
*/
|
*/
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { defer } from 'rxjs';
|
||||||
import { defer } from 'rxjs/observable/defer';
|
|
||||||
|
|
||||||
// #docregion async-data
|
// #docregion async-data
|
||||||
/** Create async observable that emits-once and completes
|
/** Create async observable that emits-once and completes
|
||||||
|
|
|
@ -3,8 +3,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
// #docregion import-observable
|
// #docregion import-observable
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable, of } from 'rxjs';
|
||||||
import { of } from 'rxjs/observable/of';
|
|
||||||
// #enddocregion import-observable
|
// #enddocregion import-observable
|
||||||
|
|
||||||
// #docregion import-heroes
|
// #docregion import-heroes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Hero } from '../hero';
|
import { Hero } from '../hero';
|
||||||
import { HeroService } from '../hero.service';
|
import { HeroService } from '../hero.service';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
class DummyHeroesComponent {
|
class DummyHeroesComponent {
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue