angular使用ngrx做状态管理

1、在actions文件夹下创建action文件appName.action.ts

import { Action } from "@ngrx/store";

export const types = {

UPDATE_APPNAME: "UPDATE_APPNAME"

}

export class UpdateAppNameAction implements Action {

readonly type = types.UPDATE_APPNAME;

constructor(public payload:string){}

}

export type Actions = UpdateAppNameAction

2、在store文件夹下创建reducer文件appName.reducer.ts

import * as UpdateAppNameAction from "../actions/appName.action";

// 定义 reducer的State

export interface AppNameState {};

// State的初始默认值

const initialState: AppNameState = {

appname: "test"

};

// 定义action 如何改变state的状态

export function appNameReducer(state:AppNameState = initialState,action:UpdateAppNameAction.Actions){

switch(action.type){

case UpdateAppNameAction.types.UPDATE_APPNAME:

return Object.assign({}, state, {

appname: action.payload

});

default:

return state;

}

}

3、在app.module.ts中引入

@NgModule({

declarations: [AppComponent],

imports: [

BrowserModule,

StoreModule.forRoot({ appNameStateSelect: appNameReducer })

]

})

4、在app.component.ts中获取,并通过action更新store中的appName

// 获取到appName作为全局变量使用

setTimeout(()=>{

this.store.dispatch({// 通知action,通过action更新store

type: types.UPDATE_APPNAME,

payload: new Date()

})

},1000)// 此处在实际项目中改为从后端获取

5、在模块中调用

AppNameState$: Observable<AppNameState>;

constructor(private store: Store<AppNameState>) {

this.AppNameState$ = store.select("appNameStateSelect");//// 从app.module.ts中获取appidStateSelect状态流

}

ngOnInit() {

this.AppNameState$.subscribe((state: any) =>{

console.log(state) // 查看输出信息即为全局变量APPName

console.log(state.appname);

})

}

参考:https://blog.csdn.net/gaiery/article/details/103312248(主要参考,根据此链接实际操作一遍)

https://blog.csdn.net/roamingcode/article/details/84568140