NgRX-01

1. 介紹ngrx

ngrx 相當(dāng)于 Angular 版本的 redux缎浇,是 Angular 的狀態(tài)管理工具

2. 安裝依賴

ng add方式,會自動生成所需文件并在app.module.ts中導(dǎo)入

ng add @ngrx/store
ng add @ngrx/store-devtools
ng add @ngrx/effects
ng add @ngrx/router-store

action.ts:為要改變數(shù)據(jù)的操作定義不同action
effects.ts(有數(shù)據(jù)請求的):通過判斷action.type赴肚,來發(fā)起service
reducer.ts:判斷action.type素跺,返回新的store數(shù)據(jù)
component.ts:從store取數(shù)據(jù)

3. 計數(shù)器 demo

代碼地址

3.1 actions counter.action.ts

import { createAction } from '@ngrx/store';

export const increment = createAction('[counter component] increment');
export const decrement = createAction('[counter component] decrement');
export const reset = createAction('[counter component] reset');

3.2 reducers counter.recuder.ts

import { createReducer, on, State } from '@ngrx/store';

import * as Actions from './counter.action';

// 1. 定義一個初始狀態(tài)
const initialState = 0;

const _reducer = createReducer(
  initialState,
  on(Actions.increment, state => state + 1),
  on(Actions.decrement, state => state - 1),
  on(Actions.reset, _ => 0)
);

export const counterReducer = (state, action) => {
  return _reducer(state, action);
};

3.3 模塊注冊 app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

import { counterReducer } from './counter.reducer';
import { StoreModule } from '@ngrx/store';
import { MyCounterComponent } from './my-counter/my-counter.component';

@NgModule({
  imports: [BrowserModule, StoreModule.forRoot({ counter: counterReducer })], //引入 storeModule
  declarations: [AppComponent, MyCounterComponent],
  bootstrap: [AppComponent]
})
export class AppModule {}

3.4 編寫組件

// my-counter.component.ts

import { Component } from '@angular/core';
import { Observable } from 'rxjs';

import { Store } from '@ngrx/store';
import * as counterActions from '../counter.action';

@Component({
  selector: 'app-my-counter',
  templateUrl: './my-counter.component.html',
  styleUrls: ['./my-counter.component.css']
})
export class MyCounterComponent {
  count$: Observable<number>;

  constructor(private store$: Store<{ counter: number }>) {
    // create count$

    this.count$ = store$.select('counter');

    console.log(this.count$);
  }
  increment() {
    this.store$.dispatch(counterActions.increment());
  }

  decrement() {
    this.store$.dispatch(counterActions.decrement());
  }

  reset() {
    this.store$.dispatch(counterActions.reset());
  }
}
<p>
  {{count$ | async}}
</p>

<button (click)="increment()">increment</button>
<button (click)="decrement()">decrement</button>
<button (click)="reset()">reset</button>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市誉券,隨后出現(xiàn)的幾起案子指厌,更是在濱河造成了極大的恐慌,老刑警劉巖踊跟,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩验,死亡現(xiàn)場離奇詭異,居然都是意外死亡商玫,警方通過查閱死者的電腦和手機(jī)箕憾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拳昌,“玉大人袭异,你說我怎么就攤上這事【嫣伲” “怎么了御铃?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵碴里,是天一觀的道長。 經(jīng)常有香客問我上真,道長咬腋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任睡互,我火速辦了婚禮帝火,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘湃缎。我一直安慰自己犀填,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布嗓违。 她就那樣靜靜地躺著九巡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹂季。 梳的紋絲不亂的頭發(fā)上冕广,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音偿洁,去河邊找鬼撒汉。 笑死,一個胖子當(dāng)著我的面吹牛涕滋,可吹牛的內(nèi)容都是我干的睬辐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼宾肺,長吁一口氣:“原來是場噩夢啊……” “哼溯饵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锨用,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤丰刊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后增拥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啄巧,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年掌栅,在試婚紗的時候發(fā)現(xiàn)自己被綠了秩仆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡渣玲,死狀恐怖逗概,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忘衍,我是刑警寧澤逾苫,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站枚钓,受9級特大地震影響铅搓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搀捷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一星掰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫩舟,春花似錦氢烘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饭于,卻和暖如春蜀踏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掰吕。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工果覆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人殖熟。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓局待,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菱属。 傳聞我的和親對象是個殘疾皇子燎猛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容