【问题标题】:Angular Reuse Component in different routes不同路线中的 Angular 重用组件
【发布时间】:2017-07-10 03:46:49
【问题描述】:

我有以下路线,id 是可选参数,因此用户可以加载信息,或者如果没有提供 id,他们可以添加信息。 我希望能够重用该组件,这样页面就不必重新加载(在 ngOnInit 中调用 api),但是因为它们是两个单独的路由,所以角度总是会创建一个全新的组件并调用 ngOnInit。

我尝试过使用儿童,但仍然遇到同样的问题

(这是 angular 4 路由器)

const routes: Routes = [
  {
    path: 'stuff/info',
    component: InfoComponent,
  },
  {
    path: 'stuff/info/:id',
    component: InfoComponent,
  },
]

【问题讨论】:

  • 这样做有什么错误吗?
  • @allanjwalter 请使用此代码遇到的错误编辑您的问题。
  • 没有错误,我把问题中的问题描述得很清楚,就是angular没有复用组件

标签: angular angular-router


【解决方案1】:

Angular 具有必需、可选和查询参数。您定义的“可选”参数不是“可选”,因为 Angular 已经定义了可选参数。对于“true”可选参数,您不需要将它们定义为路由配置的一部分。所以你可以像这样用stuff/info 定义一个路由:

const routes: Routes = [
  {
    path: 'stuff/info',
    component: InfoComponent,
  }
]

然后您可以使用 .navigate 或 routerLink 添加可选参数,如下图所示。

注意:从 Angular 4 开始,这应该是

this.route.snapshot.paramMap.get('start')

或者,您可以始终传递 id 并在创建时传递 0 或其他一些已知值。我在这里有一个完整的例子:https://github.com/DeborahK/Angular-Routing

【讨论】:

  • 这很好,谢谢,出于兴趣,是否可以从外部来源的链接中传递这些参数,在这种情况下,它们必须以某种方式显示在 url 中?
  • 我不确定我是否完全理解?但是,如果您的意思是是否可以从您的博客(例如)链接到 www.mysite.com/stuff/info;id=15,那么可以。 Angular 路由支持所谓的“深度链接”。你只需要正确设置你的服务器来进行 URL 重写,以便它允许 Angular 应用程序处理 URL。
猜你喜欢
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多