【问题标题】:Redirection with resolvers Angular 6使用解析器重定向 Angular 6
【发布时间】:2018-11-14 17:44:52
【问题描述】:

我为我的应用程序使用 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);

如果您有任何想法,请告诉我。

谢谢大家。

【问题讨论】:

    标签: angular angular2-observables resolver


    【解决方案1】:

    .navigate 方法将命令数组作为第一个参数。您正在将组合的 url 传递给.navigateByUrl。因此解析器无法访问 id 参数。

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

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

    【讨论】:

    • 您能告诉我为什么您需要在导航之前更新this.username 组件属性吗?我的意思是它启动更改检测周期,它可以解释为什么重定向只有在流程完成后才能正常工作(在 setTimeout 回调中。您甚至可以将其设置为 0 毫秒,仅供参考)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多