首页 > 解决方案 > 如何重定向到 ngOnInit 中的新组件

问题描述

我正在制作一个 Angular 组件,用户可以通过单击发送到其电子邮件的链接来访问该组件,该链接包含他们的用户 ID。如果他们已经完成注册,我需要让它自动将他们重定向到管理页面。但是,似乎router.navigate在事件内部使用ngOnInit不起作用,给出错误

错误:未捕获(承诺):错误:BrowserModule 已加载。

这是代码:

ngOnInit() {
this.activatedroute.params.subscribe(params => {
  this.API.getUserData(params['id']).subscribe(res => {
    console.log(res);
    this.item = res;
    sessionStorage.setItem('USER_ID', this.item._id);
    if (res["registry_complete"]){
      this.router.navigate(['/user-admin']);
    } else {
    }
  });
});
}

我该如何做到这一点?

编辑:尽管错误说明了什么,BrowserModule 只在主模块中导入一次。如果“this.router.navigate(['/user-admin']);” 被删除,代码运行良好。它在 ngOnInit 或构造函数之外也能正常运行。我怀疑这个错误的原因是因为 router.navigate 尝试再次加载主模块,并且由于页面正在加载它因此导入 BrowserModule 两次 - 但如果是这种情况,如何这种方式重定向角?

编辑:这实际上是用户管理员路由模块中的一个问题。

标签: angularangular-ui-routerngoninit

解决方案


该错误表明,不知何故,您已BrowserModule多次在应用程序中导入。如docs中所述,该BrowserModule模块必须在应用程序的根模块中导入:

不要在任何其他模块中导入 BrowserModule。功能模块和延迟加载模块应该导入 CommonModule。他们需要共同的指令。他们不需要重新安装应用程序范围的提供程序。

此外,NoopAnimationsModule并且BrowserAnimationsModulecontains BrowserModule,因此如果您要导入其中一个,则需要删除导入 BrowserModule(如果有的话)。


推荐阅读