angular - 如何重定向到 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 两次 - 但如果是这种情况,如何以这种方式重定向角?
编辑:这实际上是用户管理员路由模块中的一个问题。
解决方案
该错误表明,不知何故,您已BrowserModule
多次在应用程序中导入。如docs中所述,该BrowserModule
模块必须在应用程序的根模块中导入:
不要在任何其他模块中导入 BrowserModule。功能模块和延迟加载模块应该导入 CommonModule。他们需要共同的指令。他们不需要重新安装应用程序范围的提供程序。
此外,NoopAnimationsModule
并且BrowserAnimationsModule
contains BrowserModule
,因此如果您要导入其中一个,则需要删除导入 BrowserModule
(如果有的话)。
推荐阅读
- go - ios 日志中出现的字符是否有术语,如`\MC\M-6` 或`\134`
- php - Symfony 4 addFlash 出现在网络选项卡上,但不在页面上
- ranking - 有没有办法在电源查询中对多列进行排名?
- reactjs - 调用 handleSubmit 时禁用验证
- decimal - 如何获取邮递员的json响应中提供的所有十进制数字?
- azure - 我可以将 Azure 应用程序类型从“Web 应用程序/API”更改为“本机”吗?
- laravel - 仅加载具有现有参数的路线
- c# - Asp.net 搜索功能问题
- android - CMAKE 不遵守 gradle 的标志,以便在 Android 上构建 NDK
- sql - BigQuery - 根据另一个事件参数选择事件参数值