首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角通参数CanActivate

角通参数CanActivate
EN

Stack Overflow用户
提问于 2020-07-02 16:15:45
回答 1查看 57关注 0票数 0

我用的是角9。

正如您从下面的代码中看到的,app-routing.module.ts将url 'approval-edit/:tripId'定向到ApprovalEditGuard,后者将路由到LoginComponentLoginComponent使用backUrl导航回原始的url 'approval-edit/:tripId'

这一切都如期而至。

但是,我不知道如何将tripId参数传递到最终组件。

app-routing.module.ts

代码语言:javascript
复制
const routes: Routes = [
    { path: 'approval-edit/:tripId', component: ApprovalEditComponent, canActivate: [ApprovalEditGuard] }
];

approval-edit.guard.ts

代码语言:javascript
复制
export class ApprovalEditGuard implements CanActivate, CanLoad {

  constructor(private authService: AuthService, private router: Router, private activateRoute: ActivatedRoute) { }

  canActivate() {
    return this.canLoad();
  }

  canLoad() {
    if (!this.authService.isLoggedIn()) {
      console.log(this.activateRoute.snapshot.params['tripId']);
      this.router.navigate(['/login'], { queryParams: { backUrl: '/approval-edit' } });
    }
    return this.authService.isLoggedIn();
  }
}

login.component.ts

代码语言:javascript
复制
export class LoginComponent implements OnInit {

  loginForm: FormGroup;

  constructor(private authService: AuthService, private formBuilder: FormBuilder, private router: Router, private activatedRoute: ActivatedRoute) {
  }

  ngOnInit(): void {
    this.loginForm = this.formBuilder.group({
      username: [''],
      password: ['']
    });
  }

  get f() { return this.loginForm.controls; }
  get backUrl(): string | null {
    return this.activatedRoute.snapshot.queryParamMap.get('backUrl');
  }

  login() {
    this.authService.login(
      {
        username: this.f.username.value,
        password: this.f.password.value
      }
    )
    .subscribe(success => {
      if (success) {
        this.router.navigate([this.backUrl || '/approval-list']);
      }
    });
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-02 19:31:09

我也处理过同样的问题

警卫

代码语言:javascript
复制
  constructor(private authService:AuthService, private router:Router) {

  }

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot){
    
    return (this.authService.isLoggedIn())?true:this.router.parseUrl('login?backUrl='+state.url);
  }

登录

代码语言:javascript
复制
constructor(private authService: AuthService, private router:Router, private activatedRoute:ActivatedRoute) {

    }

login(){
this.authService.login(login,password).pipe(
    filter(success=>success),
    switchMap(()=>this.activatedRoute.queryParams),
    switchMap((_)=>{
        const {backUrl} = _;
        return from(this.router.navigate([backUrl || '/']));
    })
).subscribe()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62700768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档