ngOnInit被两次​​调用,也许是路由问题

时间:2019-10-29 23:14:12

标签: angular

最初,我的页面按路线加载数据。因此通常路线为localhoat:8000\bProject

在页面上有一个下拉菜单,当我选择该值时,我希望通过该值更改url。它应该喜欢localhost:8000\CaseId\5

路线代码。

const routes: Routes = [
  {path: 'bProject', component: BProjectComponent},
  {path: 'bProject/CaseId/:id, component: BProjectComponent}
];

下拉选择值方法是

private loadCaseData() {
  const url = 'app/bProject/CaseId';
  this.router.navigate([url, this.caseId]);
}

代码确实起作用,但是我发现ngOnInit被调用了两次。我怀疑是否有两个组件实例正在运行,因为在路由中,我两次使用同一组件。

使用导航是否正确?

2 个答案:

答案 0 :(得分:0)

问题是您要重新加载两次相同的组件:BProjectComponent。

首先:当您加载项目组件时。

第二个:在选择中选择一个元素后,导航到一条路径,该路径将您带到具有添加路径的相同Component。

我建议您将CaseId用作'/ bProject'路径的子代。

const routes: Routes = [
  {path: 'bProject', component: BProjectComponent, children: [
    {path: 'CaseId/:id, component: CaseComponent}
  ]}
];

然后,您下拉选择值方法应为:

private loadCaseData() {
  this.router.navigate([./CaseId, this.caseId]);
}

答案 1 :(得分:0)

事实证明,我创建了一个全局服务来存储数据。当第二个实例出现时,我从服务中检索数据,而不是从数据库中重新加载数据。

听起来很脏,但我必须这样做。