zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    12-五子棋游戏:享元模式
    11-制作糖醋排骨:外观模式
    10-蒸馒头:装饰者模式
    09-公司层级结构:组合模式
    08-开关与电灯:桥接模式
    07-电源转换:适配器模式
    将博客搬至CSDN
    iview和element中日期选择器快捷选项的定制控件
    详解AJAX工作原理以及实例讲解(通俗易懂)
    最全肌肉锻炼动图
  • 原文地址:https://www.cnblogs.com/boreguo/p/11989972.html
Copyright © 2011-2022 走看看