angularjs 不执行路由器导航

de90aj5v  于 11个月前  发布在  Angular
关注(0)|答案(2)|浏览(85)

我用Angular写代码。
这是登录的基本组件
完成表单并点击登录按钮后,将触发此功能

loginFn() {
    this.authService.loginFn(email, password)
    .then((userCredential) => {
      this.router.navigate(['/dashboard'])
    })
  }

字符串
但路线永远不变,所以我必须做这个“把戏”来工作

setTimeout(() => this.router.navigate(['/dashboard']), 10);


我不喜欢这样用,我觉得我错过了什么
有人知道什么是错的吗?

wlp8pajw

wlp8pajw1#

您遇到的问题与Angular中的更改检测周期有关。当您在loginFn函数中调用this.authService.loginFn(email,password)时,它可能会触发一个更改检测周期,从而阻止路由更改立即发生。这就是为什么settask解决方案似乎有效。您也可以使用ChangeDetectorRef手动触发更改检测周期,而不是使用settask。

constructor(
    private authService: AuthService,
    private router: Router,
    private cdr: ChangeDetectorRef
  ) {}

  loginFn() {
    this.authService.loginFn(email, password)
      .then((userCredential) => {
        this.router.navigate(['/dashboard']);
        this.cdr.detectChanges();
      });
  }
}

字符串

mw3dktmi

mw3dktmi2#

我同意Mustahid的观点,你可以使用Observable机制,比如使用RxJS库,它可以让你立即触发路由器,也可以让你方便地实现基于事件的编程。

loginFn() {
    this.authService.loginFn(email, password)
     .subscribe((userCredential) => {
      this.router.navigate(['/dashboard'])
    });
  }
  
  import { HttpClient } from '@angular/common/http'
  
  constructor(public http: Httpclient){}
  loginFn(email: string, password: string){
  const formdata = new FormData();
  formdata.append('email',email);
  formdata.append('password',password);
  return this.http.post<any>('/login',formdata);

}

字符串

相关问题