【问题标题】:How to refresh component mapping by Router如何通过路由器刷新组件映射
【发布时间】:2017-04-11 08:13:41
【问题描述】:

是否可以通过同一个routerLink刷新组件映射?假设这种情况:

  1. 我有一些路由:

    const appRoutes: Routes = [
        //other Routes...
        {path: 'some/:formCode', component: SomeComponent},
        //other Routes...
    ]
    
  2. 用户输入链接/some/dwa21e。应用程序根据dwa21e 代码动态加载表单。显示动态表单(代码唯一)。

  3. 用户可以填写表格。完成表单时,其他操作在 SomeComponent 中执行,但在表单之外。

  4. 用户尝试提交表单。有两种选择:

    • 验证不正确:显示错误消息。 SomeComponent 保持与提交前相同的状态。

    • 验证正确: SomeComponent 返回到 2. 中的状态。

我在提交正确的表单后重定向到/some/dwa21e 时遇到问题。如果我尝试重定向到当前 URL,则没有任何反应。 是否可以将组件刷新到初始状态? 也许,有没有其他方法可以做到这一点?

我想强调,清除表格是不够的,因为来自 3 的操作。点

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 我不知道这个问题有什么问题?我问了一个具体问题:如何将路由器的组件映射刷新到初始状态。我举了一些例子(分步)来解释这个问题。请说明问题所在,以便我正确更正问题。

标签: angular angular2-routing


【解决方案1】:

你应该用组件创建一个空路由。 该组件将在ngOnInit() 上重定向到/some/dwa21e; 只需将 dwa21e 参数值发送到那个空组件,就可以重定向到带有值的 /some。

据我所知,除非刷新整个页面,否则无法刷新组件。

【讨论】:

  • 我认为,这是一个聪明的解决方法。我会尝试让你知道它是否有效。是的,我忘了写,刷新整个页面不是一个选项。
【解决方案2】:

当想要刷新组件时,可以选择订阅路由参数。这将使您能够再次触发ngOnInit() 中的代码。

import { ActivatedRoute } from '@angular/router';
...
currentId: string;

constructor(private _route: ActivatedRoute) {
    this.currentId = _route.snapshot.params['id'];
}

ngOnInit() {
    this._route.params.subscribe(params => {
        this.currentId = params['id'];
        this.functionToLoad();
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2023-03-02
    • 2018-10-01
    • 2013-12-01
    • 2019-05-28
    • 2020-09-18
    • 1970-01-01
    • 2019-08-31
    • 2017-05-07
    相关资源
    最近更新 更多