使用解析器Angular 6重定向

时间:2018-11-14 09:18:13

标签: angular angular2-observables resolver

我在我的应用程序中使用angular-cli,并且有一个登录页面,这是提交它的处理程序:

onSubmit() {
    this.authService.login(this.uname.value, this.pass.value)
      .subscribe(
        (user: User) => {
          this.username = user.username;
          localStorage.userExist = true;
          this.route.navigate(['/office/1']);
        },
        (err) => {
          this.errorFromServer = err.error;
        });
  }

提交后,我希望将我重定向到localhost:3000/office/1,但是却出现错误:

GET http://localhost:3000/api/plan net::ERR_CONNECTION_RESET.

http://localhost:3000/api/plan提供了有关办公计划的信息,而我在PlanResolver的帮助下获得了这些数据。实际上,当我在办公室之间切换时,我可以获得这些数据,但是当我尝试从登录页面重定向时,该数据不起作用。因此,订阅中的导航可能有问题。

我有两个解析器,应该在导航之前执行:

{path: 'office/:id', component: OfficesComponent,
  resolve: {cres: OfficeResolver, plan: PlanResolver},
  canActivate: [AuthGuardService]},

当我有一个解析器时,它可以正常工作,因此我决定使用forkJoin将两个解析器合并为一个,但是出现了相同的错误。

我现在唯一的解决方案是将导航置于SetTimeout中:

setTimeout(() => {
   this.route.navigate(['/office/1']);
}, 500);

如果您有什么想法,请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:1)

.navigate方法将命令数组作为第一个参数。您正在传递类似于.navigateByUrl的组合网址。因此,解析程序无法访问id参数。

尝试像这样重新定义重定向:

this.route.navigate(['office', 1']);