Skip to content
This repository was archived by the owner on Dec 4, 2017. It is now read-only.

Commit 7b9f9f6

Browse files
Added more writeup on data sharing. Added examples to guide
1 parent 120d6cd commit 7b9f9f6

10 files changed

+186
-63
lines changed

public/docs/_examples/rxjs/ts/app/api-error-handler.service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// #docplaster
2+
// #docregion
13
import { Injectable } from '@angular/core';
24
import { Response } from '@angular/http';
35
import { Observable } from 'rxjs/Observable';

public/docs/_examples/rxjs/ts/app/app-routing.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { AddHeroComponent } from './add-hero.component';
66
import { HeroDetailComponent } from './hero-detail.component';
77
import { HeroSearchComponent } from './hero-search.component';
88
import { HeroListComponent } from './hero-list.component';
9+
import { HeroCounterComponent } from './hero-counter.component';
910

1011
const appRoutes: Routes = [
1112
{ path: 'heroes/add', component: AddHeroComponent },
1213
{ path: 'heroes/search', component: HeroSearchComponent },
14+
{ path: 'hero/counter', component: HeroCounterComponent },
1315
{ path: 'heroes', component: HeroListComponent },
1416
{ path: 'hero/:id', component: HeroDetailComponent },
1517
{ path: '', redirectTo: '/heroes', pathMatch: 'full' },
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
11
// #docplaster
22
// #docregion
3-
import { Component } from '@angular/core';
3+
import { Component, OnInit } from '@angular/core';
4+
import { EventAggregatorService } from './event-aggregator.service';
45

56
@Component({
67
selector: 'my-app',
78
template: `
89
<h1 class="title">RxJS in Angular</h1>
910
1011
<a routerLink="/heroes">Heroes</a><br>
12+
<a routerLink="/hero/counter">Hero Counter</a><br>
1113
<a routerLink="/heroes/add">Add Hero</a><br>
1214
<a routerLink="/heroes/search">Hero Search</a>
1315
1416
<router-outlet></router-outlet>
1517
1618
<loading-component></loading-component>
19+
<message-log></message-log>
1720
`
1821
})
19-
export class AppComponent {
22+
export class AppComponent implements OnInit {
23+
constructor(private eventService: EventAggregatorService) {}
24+
25+
ngOnInit() {
26+
this.eventService.add({
27+
type: 'init',
28+
message: 'Application Initialized'
29+
});
30+
}
2031
}

public/docs/_examples/rxjs/ts/app/app.module.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { NgModule } from '@angular/core';
33
import { BrowserModule } from '@angular/platform-browser';
44
import { HttpModule } from '@angular/http';
5-
import { ReactiveFormsModule } from '@angular/forms';
5+
import { ReactiveFormsModule } from '@angular/forms';
66

77
import { AppComponent } from './app.component';
88
import { AppRoutingModule } from './app-routing.module';
@@ -12,13 +12,19 @@ import { HeroSearchComponent } from './hero-search.component';
1212
import { HeroDetailComponent } from './hero-detail.component';
1313
import { HeroListComponent } from './hero-list.component';
1414
import { HeroCounterComponent } from './hero-counter.component';
15+
import { MessageLogComponent } from './message-log.component';
16+
1517
import { LoadingService } from './loading.service';
1618
import { HeroService } from './hero.service';
1719

20+
// #docregion event-aggregator-import
21+
import { EventAggregatorService } from './event-aggregator.service';
22+
// #enddocregion event-aggregator-import
23+
import { ApiErrorHandlerService } from './api-error-handler.service';
24+
1825
// Imports for loading & configuring the in-memory web api
1926
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
2027
import { InMemoryDataService } from './in-memory-data.service';
21-
import { ApiErrorHandlerService } from './api-error-handler.service';
2228

2329
@NgModule({
2430
imports: [
@@ -35,11 +41,13 @@ import { ApiErrorHandlerService } from './api-error-handler.service';
3541
HeroSearchComponent,
3642
HeroDetailComponent,
3743
HeroListComponent,
38-
HeroCounterComponent
44+
HeroCounterComponent,
45+
MessageLogComponent
3946
],
4047
providers: [
4148
HeroService,
4249
LoadingService,
50+
EventAggregatorService,
4351
ApiErrorHandlerService
4452
],
4553
bootstrap: [ AppComponent ]
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,38 @@
1-
import { Injectable } from '@angular/core';
2-
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
1+
// #docplaster
2+
// #docregion
3+
// #docregion imports
4+
import { Injectable } from '@angular/core';
5+
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
6+
// #enddocregion imports
37

8+
// #docregion event-interface
49
export interface AppEvent {
510
type: string;
611
message: string;
712
}
13+
// #enddocregion event-interface
814

915
@Injectable()
1016
export class EventAggregatorService {
11-
_events: AppEvent[];
12-
events$: BehaviorSubject<AppEvent[]> = new BehaviorSubject<any>([]);
17+
_events: AppEvent[] = [];
18+
events$: BehaviorSubject<AppEvent[]>;
19+
20+
constructor() {
21+
this._events = [];
22+
this.events$ = new BehaviorSubject(this._events);
23+
}
1324

1425
add(event: AppEvent) {
1526
this._events.push(event);
16-
this.next();
27+
this.notify();
1728
}
1829

1930
clear() {
2031
this._events = [];
21-
this.next();
32+
this.notify();
2233
}
2334

24-
next() {
35+
notify() {
2536
this.events$.next(this._events);
2637
}
2738
}

public/docs/_examples/rxjs/ts/app/hero-counter.component.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
// #docplaster
22
// #docregion
3-
import { Component, OnInit } from '@angular/core';
3+
import { Component, OnInit, OnDestroy } from '@angular/core';
44
import { Subject } from 'rxjs/Subject';
55
import { Observable } from 'rxjs/Observable';
66
import { Observer } from 'rxjs/Observer';
77
import { Subscription } from 'rxjs/Subscription';
88

9-
import { HeroService } from './hero.service';
10-
import { Hero } from './hero';
11-
129
@Component({
1310
selector: 'hero-counter',
1411
template: `
@@ -18,15 +15,15 @@ import { Hero } from './hero';
1815
</p>
1916
`
2017
})
21-
export class HeroCounterComponent implements OnInit {
18+
export class HeroCounterComponent implements OnInit, OnDestroy {
2219
count: number = 0;
2320
counter$: Observable<number>;
2421
sub: Subscription;
2522
destroy$ = new Subject();
2623

2724
ngOnInit() {
2825
this.counter$ = Observable.create((observer: Observer<number>) => {
29-
const interval = setInterval(() => {
26+
setInterval(() => {
3027
observer.next(this.count++);
3128
}, 1000);
3229
});

public/docs/_examples/rxjs/ts/app/loading.component.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import 'rxjs/add/operator/delay';
2-
import { Component, OnInit } from '@angular/core';
1+
// #docplaster
2+
// #docregion
3+
import { Component, OnInit, OnDestroy } from '@angular/core';
34
import { Subscription } from 'rxjs/Subscription';
45
import { LoadingService } from './loading.service';
56

@@ -11,7 +12,7 @@ import { LoadingService } from './loading.service';
1112
`,
1213
styleUrls: ['./loading.component.css']
1314
})
14-
export class LoadingComponent implements OnInit {
15+
export class LoadingComponent implements OnInit, OnDestroy {
1516
loading: boolean = true;
1617
sub: Subscription;
1718

public/docs/_examples/rxjs/ts/app/loading.service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// #docplaster
2+
// #docregion
13
import 'rxjs/add/operator/map';
24
import 'rxjs/add/operator/distinctUntilChanged';
35
import { Injectable } from '@angular/core';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// #docplaster
2+
// #docregion
3+
import { Component, OnInit } from '@angular/core';
4+
import { EventAggregatorService, AppEvent } from './event-aggregator.service';
5+
import { Observable } from 'rxjs/Observable';
6+
7+
@Component({
8+
selector: 'message-log',
9+
template: `
10+
<h3>Event Log</h3>
11+
12+
<ul>
13+
<li *ngFor="let event of events$ | async">{{ event.message }}</li>
14+
</ul>
15+
`
16+
})
17+
export class MessageLogComponent implements OnInit {
18+
events$: Observable<AppEvent[]>;
19+
20+
constructor(private eventService: EventAggregatorService) {}
21+
22+
ngOnInit() {
23+
this.events$ = this.eventService.events$;
24+
}
25+
}

0 commit comments

Comments
 (0)