Angular侧边栏用户名不刷新,仍是上个用户名

        用的框架是把sidebar写在app.component.html里的,组件初始化会读取localStorage里的用户名来更新侧边栏里的用户名:

  ngOnInit(): void {
    var user_name = 'User'
    if (localStorage.getItem('user_name')){
      user_name = localStorage.getItem("user_name") as string
      
    };
    this.user_name = user_name;
  }

        但是只有一开始登进来有效,如果退出换账号登录,重进页面不会调用ngOnInit(){},需要刷新页面才能显示新的用户名。

        考虑几个解决方案:

1、生命周期钩子。

        页面负担大,而且没仔细研究过ngDoCheck,ngAfterContentChecked,ngAfterViewChecked这几个是咋用的,所以直接忽略。

2、跳转路由时直接刷新页面。

        没研究明白,忽略。

3、EventEmitter事件。

        其实最先想到的就是这个,但是感觉可能大概没有必要,反而最后才考虑他,在处理上有点奇怪,仅作参考。

        在通用service里创建event,类型为string(用户名):

public loginUsernameEvent =  new EventEmitter<string>();

        在login组件中导入,登录成功后触发该事件:

import ...
import { CommonService } from 'src/app/services/common-service.service';

@Component({...})
export class LoginComponent implements OnDestroy, AfterViewInit {
  ...
  ...
  constructor(..., public common:CommonService) {}

  login() {
    ... //Login success
    this.common.loginUsernameEvent.emit(response_data.user_name)
  }

}

        最后在侧边栏中监听该事件:

import { CommonService } from 'src/app/services/common-service.service';  
constructor(
    private readonly common: CommonService
    ) {
      this.common.loginUsernameEvent.subscribe(user_name=>{
        this.user_name = user_name; 
      })
  }

  1.  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值