this.router.navigate返回false

问题描述 投票:0回答:1

在用户成功登录后,我正在尝试将其重定向到上一条路。

我的auth.guard.ts

    const currentUser = this.authenticationService.currentUserValue;
    if (currentUser) {
      // logged in so return true
      return true;
    }

    // not logged in so redirect to login page with the return url
    this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
    return false;

设置适当的returnUrl

然后我的login.component.ts

[...]
// get return url from route parameters or default to '/'
    this.route.queryParams
      .subscribe(params => {
        this.returnUrl = params['redirectUrl'] || '/'
        console.log(this.returnUrl)
        console.log(params)
      } );

[...]

this.authenticationService.login(this.f.email.value, this.f.password.value)
      .pipe(first())
      .subscribe(
        data => {
          //TODO: navigate returns false
         this.router.navigate([this.returnUrl]).then(nav => {
           console.log(nav); // true if navigation is successful
         }, err => {
           console.log(err) // when there's an error
         });
        },
        error => {
          this.spinner = false;
          this.submitted = false;
          this.invalid = true;
          this.loading = false;
        },
        () => {
          this.spinner = false;
          this.submitted = false;
        });

此处,导航返回false,并且不执行其他任何操作。我尝试查看this.returnUrl是否设置正确,确实如此。所以我不知道是什么原因引起的。如果我设置this.router.navigate ['/ something'],则可以正常工作。

angular routing
1个回答
0
投票

login.component.ts

在ngOnInit()

this.route.queryParams.subscribe(
   params => (this.returnUrl = params.return || '/')
);

然后

this.authenticationService.login(this.f.email.value, this.f.password.value)
      .pipe(first())
      .subscribe(
        data => {
         this.router.navigate([this.returnUrl]);
        },
        error => {
          this.spinner = false;
          this.submitted = false;
          this.invalid = true;
          this.loading = false;
        } 
     });

这里您使用returnUrl作为您的queryParam

this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});

但是您尝试获取redirectUrl

params['redirectUrl']

params['redirectUrl']更改为params['returnUrl']

© www.soinside.com 2019 - 2024. All rights reserved.