我会尽量保持简单和简洁。
我们正在使用 Angular 4。通常解决方案是在以前的版本中添加观察者,但这些不再存在,因此需要一些现实世界的知识来实现可能是一个简单问题的解决方案。
我们的 main.ts 文件中有 3 个组件
<header_component></header_component>
<router_outlet></router_outlet>
<footer_component></footer_component>
因此,在登录和注销时刷新视图(组件)时我们遇到了问题。
在“登录”时,使用单独的 router_outlet,在成功登录时,我们导航到用户表,这会导致 init 重新加载用户。但是,由于这只是更改 router_outlet,因此标头不会刷新以显示现在的“注销”和“重置密码”选项。因此,解决方案需要触发 headed_component 和 router_outlet 的刷新。
第二个问题是,在“注销”时,这是在 header_component 中完成的,因此标题中的选项更改为“登录”和“忘记密码”。这次的问题是 router_outlet 没有刷新以删除登录为您提供的附加功能(编辑、删除、添加)用户。
我查看了 Angular.io,文档并没有真正涵盖我们正在使用的设置。当然,这可能只是我对它的解释。
任何想法表示赞赏。
提前谢谢了
刘易斯
更新:好的,所以我在这方面取得了一些进展,但是我遇到了一些死胡同
我已经实现了可观察的概念
headerComponent 有
constructor(private _loginService: LoginService, private _authService: AuthService) {
this.isLoggedIn = _loginService.getLoggedInStatus.subscribe((loggedIn: boolean) => this.changeLoggedInStatus(loggedIn));
}
用户组件也有很多相同的
loginService 有 ` export class LoginService { @Output() getLoggedInStatus: EventEmitter = new EventEmitter();
isLoggedIn(): Observable<boolean> {
var currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser) {
this.getLoggedInStatus.emit(true);
return (true) as any;
} else {
this.getLoggedInStatus.emit(false);
return (false) as any;
}
}
注销this.getLoggedInStatus.emit(false)
时我触发,但用户组件未收到此消息
有任何想法吗?