在我的角6项目,我有3个组成部分,登录,注册和家庭。

当用户在应用程序中成功注册时,我想在绿色区域内显示这条“注册成功”消息。为此,我在shared.service.ts中制作了一个shared.service.ts
private isRegistrationSuccessfully: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
/* Successful registration */
getSuccessMessage(): Observable<boolean> {
return this.isRegistrationSuccessfully.asObservable();
}
setSuccessMessage(value: boolean): void {
this.isRegistrationSuccessfully.next(value);
}在成功注册的register.component.ts文件中,我调用set方法,
onSubmitRegistrationForm() {
// some code
this._sharedService.setSuccessMessage(true);
this._router.navigate(['/' + RouteConstants.LOGIN]);
}在login.component.ts文件中,我调用getSuccessMessage()方法,
successMessageSubscriber: any;
ngOnInit() {
this.successMessageSubscriber = this._sharedService.getSuccessMessage().subscribe((flag) => {
if (flag) {
// code for showing div
}
});
}
ngOnDestroy() {
if (this.successMessageSubscriber) {
this.successMessageSubscriber.unsubscribe();
}
}根据这段代码,注册成功后,我将得到预期的结果,如果刷新页面,getSuccessMessage()也会返回false,这也是预期的结果。但是在成功注册和登录之后(重定向到home组件),如果我立即退出,我仍然获得了getSuccessMessage()的真正价值。这应该是真的吗?还是我在这里漏掉了什么?
编辑
还有什么其他的/更好的方法,我可以做这个操作,有或没有行为主题?
发布于 2018-06-14 13:03:07
角服务是单子(默认情况下)。此外,当您调用router.navigate路由到另一个页面时,一些组件将被销毁,但服务不会被破坏。只要您停留在您的站点路径内,每次导航时重新加载整个应用程序都是没有意义的。
这对人们来说是令人惊讶的,因为URL有时会改变。但是,URL更改并不需要重新加载页面。
但是,当您刷新页面或导航到外部页面并返回时(就像在openid连接工作流中那样),则会重新加载整个应用程序。
无论如何,如果你正在寻找一个更好的方法采取,那么只需发送真假到你的行为主题立即。您的组件将获得两个值,但不对false执行任何操作。然后,当您导航时,组件将被销毁(服务是单个的,但组件不是)并重新创建,当新的组件读取时,它将读取false。
您也可以使用简单的主题而不是BehaviorSubject。
发布于 2018-06-14 13:20:42
加载登录页时,执行订阅方法。这将显示消息‘注册成功’,因为标志始终为真。
ngOnInit() {
this.successMessageSubscriber = this._sharedService.getSuccessMessage().subscribe((flag) => {
if (flag) {
this.message="successfully registered";
}
});
}解决方案是在服务中添加另一个方法来清除标志。
clearMessage(): void {
this.isRegistrationSuccessfully.next(false);
}然后在取消订阅之前调用此方法。
ngOnDestroy() {
if (this.successMessageSubscriber) {
this._sharedService.clearMessage();
this.successMessageSubscriber.unsubscribe();
}
}加载登录时,将订阅消息。当登录被卸载时,消息被取消订阅。该标志未提前清除。此代码更改将重置标志。
https://stackoverflow.com/questions/50857301
复制相似问题