Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度防护装置暂时重定向,然后返回到右侧组件_Angular_Angular Router Guards - Fatal编程技术网

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之前)点击
,查看它触发的时间和值。我打赌你会得到你的答案,或者至少是一个更有教育意义的问题:)