解决方法一:使用Angular Material组件库和NGRX存储
npm install -g @angular/cli
ng add @angular/material
ng new my-app
cd my-app
ng add @ngrx/store
app.component.ts:
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { increment, decrement, reset } from './counter.actions';
@Component({
selector: 'app-root',
template: `
Counter: {{ counter$ | async }}
`,
})
export class AppComponent {
counter$: Observable;
constructor(private store: Store<{ counter: number }>) {
this.counter$ = store.select('counter');
}
increment() {
this.store.dispatch(increment());
}
decrement() {
this.store.dispatch(decrement());
}
reset() {
this.store.dispatch(reset());
}
}
counter.actions.ts:
import { createAction } from '@ngrx/store';
export const increment = createAction('Increment');
export const decrement = createAction('Decrement');
export const reset = createAction('Reset');
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { StoreModule } from '@ngrx/store';
import { AppComponent } from './app.component';
import { counterReducer } from './counter.reducer';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
StoreModule.forRoot({ counter: counterReducer }),
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
ng serve
解决方法二:使用第三方Angular组件库和NGRX存储
ng add ngx-bootstrap
app.component.ts:
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { increment, decrement, reset } from './counter.actions';
@Component({
selector: 'app-root',
template: `
Counter: {{ counter$ | async }}
`,
})
export class AppComponent {
counter$: Observable;
constructor(private store: Store<{ counter: number }>) {
this.counter$ = store.select('counter');
}
increment() {
this.store.dispatch(increment());
}
decrement() {
this.store.dispatch(decrement());
}
reset() {
this.store.dispatch(reset());
}
}
counter.actions.ts:
import { createAction } from '@ngrx/store';
export const increment = createAction('Increment');
export const decrement = createAction('Decrement');
export const reset = createAction('Reset');
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { StoreModule } from '@ngrx/store';
import { AppComponent } from './app.component';
import { counterReducer } from './counter.reducer';
import { ButtonsModule } from 'ngx-bootstrap/buttons';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
StoreModule