Skip to content

Commit 0daa80d

Browse files
committed
added step 45
1 parent dc944ee commit 0daa80d

27 files changed

+6559
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

step45_ngrx_using_two_reducers_together/app/app.component.js

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

step45_ngrx_using_two_reducers_together/app/app.component.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import {Component} from '@angular/core';
2+
import {Observable} from 'rxjs/Observable';
3+
import 'rxjs/add/observable/interval';
4+
import 'rxjs/add/operator/map';
5+
import 'rxjs/add/observable/merge';
6+
import 'rxjs/add/operator/startWith';
7+
import 'rxjs/add/operator/scan';
8+
import 'rxjs/add/operator/mapTo';
9+
import {Subject} from "rxjs/Subject";
10+
import {Store} from '@ngrx/store';
11+
import { SECOND, HOUR, IPerson } from './reducers';
12+
import {Clock} from './clock.component';
13+
import {List} from 'immutable';
14+
15+
@Component({
16+
selector: 'my-app',
17+
directives: [Clock],
18+
template: `
19+
<input #inputNum type="number" value="0">
20+
<button (click)="click$.next(inputNum.value)">Update</button>
21+
<clock [time]="time | async"></clock>
22+
<div *ngFor="let person of people | async">
23+
{{person.name}} is in {{person.time | date:'jms'}}
24+
</div>
25+
`
26+
})
27+
export class AppComponent {
28+
click$ = new Subject()
29+
.map((value: string)=> ({type:HOUR, payload:parseInt(value)}));;
30+
31+
seconds$ = Observable
32+
.interval(1000)
33+
.mapTo({type: SECOND, payload:3});
34+
35+
time: Observable<Date>;
36+
people: Observable<List<IPerson>>;
37+
38+
constructor(store:Store<Date>) {
39+
this.time = store.select('clock');
40+
this.people = store.select('people');
41+
42+
Observable.merge(
43+
this.click$,
44+
this.seconds$
45+
)
46+
.subscribe(store.dispatch.bind(store));//Note this
47+
48+
}
49+
}

step45_ngrx_using_two_reducers_together/app/clock.component.js

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

step45_ngrx_using_two_reducers_together/app/clock.component.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {Component, Input} from '@angular/core';
2+
3+
@Component({
4+
selector: 'clock',
5+
template: `<h3>{{time | date:'medium'}}</h3>`
6+
})
7+
export class Clock{
8+
@Input() time;
9+
}

step45_ngrx_using_two_reducers_together/app/main.js

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

step45_ngrx_using_two_reducers_together/app/main.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { bootstrap } from '@angular/platform-browser-dynamic';
2+
import { disableDeprecatedForms, provideForms } from '@angular/forms';
3+
import { provideStore } from '@ngrx/store';
4+
import { AppComponent } from './app.component';
5+
import { clockReducer, peopleReducer } from './reducers';
6+
7+
bootstrap(AppComponent, [
8+
disableDeprecatedForms(),
9+
provideForms(),
10+
provideStore({ clock: clockReducer, people: peopleReducer })
11+
]);
12+
13+

0 commit comments

Comments
 (0)