ngrx结合localStorage,刷新页面防止数据丢失

ngrx结合localstorage思路(下面是获取用户信息):
1.登陆的时候接口会返回用户资料,
2.initialState默认读取localStorage里面的用户信息
3.订阅state里面的loginInfo,store.pipe(select('loginInfo')),实时获取数据
4.更新数据:一旦调用了this.store.dispatch(getLoginInfo({...}))方法更改了数据,步骤3就可以订阅到,
5.为防止刷新页面后信息丢失,调用getLoginInfo()方法后,更新localstorage里面的信息,然后initialState会被获取最新的用户信息

login.component.ts (登陆事件,存储登陆数据)

login(){
    this.loginService.login(params).subscribe(data =>{
        localStorage.setItem('USERINFO',JSON.stringify(data.userinfo));
    })
}

 action.ts

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

export const getLoginInfo = createAction(
  '[getLoginInfo Page] getLoginInfo',
   props<{payload:any}>()
);

reducer.ts

...

// 设置初始值 
const userInfo = localStorage.getItem('USERINFO');
export const initialState: any = userInfo;

const _loginInfoReducer = createReducer(initialState,
    on(getLoginInfo, (state, action) => { // getLoginInfo是action.ts中定义的方法
        return ({
            ...state,
            ...action.payload
        })
    })
);

...

 update.component.ts

 update(){
   const params = {
     username:'貂蝉',
     phone:'1511111111',
     sex:'女',
     ...
   }
   // 更新用户信息
   this.loginService.update(params).subscribe(data =>{
        // 更新localStorage里面的信息
        localStorage.setItem('USERINFO',JSON.stringify(data.userinfo));
        // 更新store里面的信息
        this.store.dispatch(getLoginInfo({
            payload:{
            ...params 
           }
        }));
   })
}

大功告成!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值