如何重定向到 ngOnInit 中的新组件

How to redirect to a new component in ngOnInit

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

Error: Uncaught (in promise): Error: BrowserModule has already been loaded.

代码如下:

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 两次 - 但如果是这种情况,在 Angular 中 是否以这种方式重定向?

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

该错误表明您以某种方式在您的应用中多次导入了 BrowserModule。如docs中指定,BrowserModule模块必须在应用程序的根模块中导入:

Do not import BrowserModule in any other module. Feature modules and lazy-loaded modules should import CommonModule instead. They need the common directives. They don't need to re-install the app-wide providers.

此外,NoopAnimationsModuleBrowserAnimationsModule 包含 BrowserModule,因此如果您要导入其中之一,则需要删除导入 BrowserModule(如果您有一个).

检查您要导入哪些模块 .module.ts

如果您正在使用 BrowserAnimationsModule

放在BrowserModule

之前

并检查什么是子模块的导入