【问题标题】:Angular 2: One path for multiple components?Angular 2:多个组件的一条路径?
【发布时间】:2020-02-01 04:07:38
【问题描述】:

我正在尝试在 Angular 8 上创建一个路由,其中​​某个路径具有公共和私有版本,因此如果我在 URL 中输入 /tracker,路由模块可以根据我是否登录将我发送到私有/公共版本登录或注销。

我尝试过使用 CanActivate 的 Guards,但如果我返回 false,这只会停止导航,而且我特别需要两条路线具有相同的路径。这是我的路由模块:

    path: '',
    children: [
      {
        path: '',
        canActivate: [AuthGuard],
        component: TrackingListPrivateComponent
      },
      {
        path: '',
        component: TrackingListComponent
      }
    ]
  }

我希望能够在注销时在 URL 上输入 /tracker 并导航到 TrackingListComponent 并在登录后在 URL 上输入 /tracker 并导航到 TrackingListPrivateComponent。

【问题讨论】:

  • 自 10 月 2 日以来您是否设法解决了这个问题?

标签: url components angular2-routing


【解决方案1】:

在路由配置中两次使用相同的路由不是一个好习惯,我什至不确定这在技术上是否可行。

在您的情况下,我只会为“/tracker”创建一个路由,并在中间组件中处理“登录”或“注销”状态:

{
    path: 'tracker',
    component: TrackingListComponent
}

在中间组件的模板中,您可以根据“loggedIn”状态调用公共或私有组件:

<app-tracking-list *ngIf="!loggedIn"></app-tracking-list>
<app-private-tracking-list *ngIf="loggedIn"></app-private-tracking-list>

您的中间 TrackingListComponent 需要一个返回已登录状态的函数:

class TrackingListComponent {
    /** Return login status */
    get loggedIn(): boolean {
        return this.loginService.loggedIn;
    }
}

【讨论】:

  • 感谢您的回复,但我的目标是自动处理渲染,在模板中使用 ngIf 使模板处理将渲染的视图,我希望路由器这样做。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 2020-08-30
  • 2017-01-12
  • 1970-01-01
  • 2018-08-13
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多