我用Angular写代码。
这是登录的基本组件
完成表单并点击登录按钮后,将触发此功能
loginFn() {
this.authService.loginFn(email, password)
.then((userCredential) => {
this.router.navigate(['/dashboard'])
})
}
字符串
但路线永远不变,所以我必须做这个“把戏”来工作
setTimeout(() => this.router.navigate(['/dashboard']), 10);
型
我不喜欢这样用,我觉得我错过了什么
有人知道什么是错的吗?
2条答案
按热度按时间wlp8pajw1#
您遇到的问题与Angular中的更改检测周期有关。当您在loginFn函数中调用this.authService.loginFn(email,password)时,它可能会触发一个更改检测周期,从而阻止路由更改立即发生。这就是为什么settask解决方案似乎有效。您也可以使用ChangeDetectorRef手动触发更改检测周期,而不是使用settask。
字符串
mw3dktmi2#
我同意Mustahid的观点,你可以使用Observable机制,比如使用RxJS库,它可以让你立即触发路由器,也可以让你方便地实现基于事件的编程。
字符串