【问题标题】:Refresh component after doing a router.navigate执行 router.navigate 后刷新组件
【发布时间】:2017-07-31 17:20:28
【问题描述】:

我正在尝试使用以下方式从一个组件导航到另一个组件:

this.router.navigate(['/path/'], '_blank');

问题是我正在导航到的组件已经创建,并且当我导航回页面时没有执行其 ngOnInit 方法。我正在尝试刷新页面上显示的数据。这是在目标组件的ngOnInit函数中:

this.sub = this._DataService.getData().subscribe(data=> {
        this.data= data;
    });

如何告诉目标组件,页面上的数据在进行导航时总是会刷新?

我正在使用 Ag-Grid 在表格中显示数据。在 NgOnInit 函数中:

this.gridOptions.rowData = this.data;

我最初来自的组件是添加新对象的表单。提交该对象后,它应该重定向到网格并显示新对象。这就是网格应该更新其数据的原因,但由于某种原因,它仅在我通过网格中的上下文菜单操作手动刷新它时才这样做,而不是在导航时。

表单中的提交函数如下所示:

 onSubmit(data) {
    this._DataService.addData(data.value).subscribe();
    this.router.navigate(['/data/']);
}

【问题讨论】:

  • 什么是'_blank'
  • 没什么,它还在那里,因为我一直在弄乱它。

标签: angular angular2-routing ag-grid


【解决方案1】:

如果您导航到相同的路由并且只有参数值更改,请将初始化代码从 constructor 移出并从 constructor 调用它,并且当路由参数更改时:

constructor(private route:ActivatedRoute) {
  route.params.subscribe(val => this.initialize())
}

【讨论】:

  • 我很难说,因为我不知道您的系统上发生了什么。您的问题不包含太多代码。
  • 那是因为它真的不多。我正在使用 Ag-Grid 在表格中显示数据。我会在我原来的问题中添加更多信息
  • 我怀疑您正在导航到的组件已经创建。如果您离开,它将被破坏,如果您返回,它将被重新创建。只有当您保持在同一条路线上并导航以使只有路线参数发生变化时,该组件才会保持活动状态。但很难说,因为您的问题不包含任何相关信息。
  • 我可以确认此方法有效并“刷新”了组件。不应该被否决,因为它可以满足问题的要求。我已经尝试过这个解决方案并设法重新导航到组件,但不知何故我只能添加数据,而不是从一张白纸开始(不是问题,而是提醒)
【解决方案2】:

我通过将我的 onSubmit 函数更改为:

  onSubmit(data) {
    this._DataService.addData(data.value).subscribe(data => {
        this.router.navigate(['/path]);
    });
}

感谢这个问题:Angular2 - Redirect after submit does not show updated data

【讨论】:

    【解决方案3】:

    我实现了一个重定向组件

    this.router.navigate(['/redirect/', window.location.pathname]);

    【讨论】:

    • 重定向组件有时有助于确保重新初始化。
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2020-07-29
    • 2013-09-05
    相关资源
    最近更新 更多