Implementing Components
To demonstrate how to use the CounterService
in your components, let's start by building out a small CounterComponent
. The component will beresponsible for incrementing and decrementing the counter by one, as well asallowing the user to reset the counter to zero.
app/components/counter.component.ts
import {Component, Input} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {CounterService} from '../services';
import {CounterActions} from '../store/counter/counter.actions';
@Component({
selector: 'counter',
templateUrl: './counter.component.html'
})
export class CounterComponent {
private currentValue$: Observable<number>;
constructor(
counterService: CounterService,
public actions: CounterActions
) {
this.currentValue$ = counterService.getCurrentValue();
}
}
app/components/counter.component.html
<p>
Clicked: {{currentValue$ | async}} times
<button (click)="actions.increment()">+</button>
<button (click)="actions.decrement()">-</button>
<button (click)="actions.reset()">Reset</button>
</p>
The template syntax should be familiar by now, displaying an Observable
counter value with the async
pipe. Any time appState.counter.currentValue
isupdated by a reducer, currentValue$
will receive the new value and | async
will update it in the template.
The component also handles some click events. Each click event is bound to expressions that call our action creators from the CounterActions
ActionCreatorService.
原文: https://angular-2-training-book.rangle.io/handout/state-management/ngrx/implementing_components.html