Angular 角度防护装置暂时重定向,然后返回到右侧组件
我使用服务检查用户是否第一次输入:Angular 角度防护装置暂时重定向,然后返回到右侧组件,angular,angular-router-guards,Angular,Angular Router Guards,我使用服务检查用户是否第一次输入:isnotFirst() isnotFirst()返回可观察的值。FALSE表示用户首次输入 如果isnotFirst()为FALSE,则防护将重定向到组件以更改密码:navigateByUrl('navigateByUrl('/changePassword')) 有时,即使isnotFirst()为TRUE,警卫也会立即重定向到/changePassword。该组件出现几秒钟,然后消失。我不知道如何避免这种忽隐忽现的行为 这是我的卫兵: import { In
isnotFirst()
isnotFirst()
返回可观察的值。FALSE表示用户首次输入
如果isnotFirst()
为FALSE,则防护将重定向到组件以更改密码:navigateByUrl('navigateByUrl('/changePassword'))
有时,即使isnotFirst()
为TRUE,警卫也会立即重定向到/changePassword
。该组件出现几秒钟,然后消失。我不知道如何避免这种忽隐忽现的行为
这是我的卫兵:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { UserService } from '../services/user.service';
@Injectable({
providedIn: 'root'
})
export class FirstGuard implements CanActivate {
constructor( private userService: UserService,
private router: Router) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.userService.isnotFirst()
.pipe(
tap( (res:any) => {
if (!res) {
this.router.navigateByUrl('/changePassword');
}
})
);
}
}
从'@angular/core'导入{Injectable};
从'@angular/Router'导入{CanActivate,ActivatedRouteSnapshot,RouterStateSnashot,Router};
从“rxjs”导入{Observable};
从“rxjs/operators”导入{tap};
从“../services/user.service”导入{UserService};
@注射的({
providedIn:'根'
})
导出类FirstGuard实现CanActivate{
构造函数(私有用户服务:用户服务,
专用路由器:路由器{}
激活(
路由:ActivatedRouteSnapshot,
状态:RouterStateSnapshot):可观察{
返回此.userService.isnotFirst()
.烟斗(
点击((分辨率:任意)=>{
如果(!res){
this.router.navigateByUrl('/changePassword');
}
})
);
}
}
我觉得是时候使用开发人员的力量了——调试器了!:)或者,如果您不知道如何使用它,也没有时间学习(在我看来,这是绝对必须的,但仍然),请在函数中放置一个控制台。log(res)
(在if之前)点击,查看它触发的时间和值。我打赌你会得到你的答案,或者至少是一个更有教育意义的问题:)