typescript 路由器导航在用户内部不工作(Angular )

liwlm1x9  于 2022-11-26  发布在  TypeScript
关注(0)|答案(3)|浏览(140)

我面临着以下问题:
我调用了getByUsernameandPassword方法并收到了响应,但是当我尝试将用户重定向到/zeiterfasung路径时,它只显示了相同的/login页面。我编写了一个console.log()来检查它是否进入了res,它确实进入了。有人能告诉我我做错了什么吗?
组成部分:

public async anmelden() {
    this.loading = true;
    this._benutzerservice.getByUsernameAndPassword(this.benutzerFormControl.value, this.passwortFormControl.value)pipe(first()).subscribe(
      res =>  {
        this._router.navigate(['/zeiterfassung']);
      },
      err => {
        console.log("a");
      });
ru9i0ody

ru9i0ody1#

为了解决这个问题,我做了以下工作:
1.创建一个函数,在可观察完成后返回承诺
1.创建另一个函数调用 first function,该函数将等待promise解析。
1.在承诺得到解决后,您可以成功导航。

isObservableCompleted(){
    return new Promise((resolve) => {
        this.observable$.pipe(takeWhile("put your condition to make observable 
        complete")
    , finalize(() => {
          resolve(true);
        })).subscribe();
      
    })

  }

  async routeAfterComplete(){
    let isComplete = await this.isObservableCompleted();
    if(isComplete)
      this._router.navigate([]) // here you can navigate successfully
  }

这只是一个变通办法,但它确实有效

uqzxnwby

uqzxnwby2#

默认情况下,导航方法将尝试导航到yourdomain.com/zeiterfassung
通过以下方式,它将导航到当前URL,例如yourcurenturl/zeiterfasung

import { ActivatedRoute } from '@angular/router';

constructor(private route :ActivatedRoute) 

public async anmelden() {
    this.loading = true;
    this._benutzerservice.getByUsernameAndPassword(this.benutzerFormControl.value, this.passwortFormControl.value)pipe(first()).subscribe(
      res =>  {
        this._router.navigate(['zeiterfassung'],{relativeTo:this.route});
      },
      err => {
        console.log("a");
      });
gk7wooem

gk7wooem3#

尝试在订阅之外路由,

public async anmelden() {
    this.loading = true;
    this._benutzerservice.getByUsernameAndPassword(this.benutzerFormControl.value, this.passwortFormControl.value) pipe(first()).subscribe(
        res => {
            this.redirect('/zeiterfassung');
        },
        err => {
            console.log("a");
        });
}

redirect(path) {
     this.router.navigate([path]) 
}

相关问题