Angular 角度相同,但布局不同,具体取决于登录状态

Angular 角度相同,但布局不同,具体取决于登录状态,angular,Angular,我目前有几个路线,分为两个不同的布局组件。MainLayoutComponent包含登录用户可以通过导航栏等看到的所有页面。 LoginLayoutComponent没有导航栏: { path: '', component: MainLayoutComponent, canActivate: [LoggedInGuard], children: [ { path: '', redirectTo: '/home', pathMatch: 'full' },

我目前有几个路线,分为两个不同的布局组件。MainLayoutComponent包含登录用户可以通过导航栏等看到的所有页面。 LoginLayoutComponent没有导航栏:

      {
    path: '', component: MainLayoutComponent, canActivate: [LoggedInGuard],
    children: [
      { path: '', redirectTo: '/home', pathMatch: 'full' },
      { path: 'loggedin', component: HomeComponent },
      ...
      { path: 'stuff', loadChildren: () => import('./modules/stuff/stuff.module').then(m => m.StuffModule)}
    ]
  },
  {
    path: '', component: LoginLayoutComponent,
    children: [
      { path: '', redirectTo: '/login', pathMatch: 'full' },
      { path: 'login', component: UserLoginComponent },
      { path: 'loggedout', redirectTo: '/login' },
    ]
  },
我现在想共享一个当前对登录用户可见的页面,也对匿名用户可见。但是匿名用户不应该看到导航栏,因此我想使用另一个LayoutComponent。 但是如何将用户重定向到子模块StuffModule中的页面,但根据其身份验证状态使用不同的布局

当前,如果未经验证的用户打开/stuff/page,他们将被转发到登录页面。 如果我将{path:'stuff',loadChildren:…行移动到LoginLayoutComponent,它对他们有效,但登录用户不再具有导航栏


同样重要的是,这两种情况下的路径相同。这些页面可能是公开共享的,也可能只是在社区内共享。共享链接应该适用于这两种情况。

我知道这不是最漂亮的解决方案,但我找到了一种解决方法:

我创建了一个组件,该组件可以通过正常路由的URL公开访问,比如/share/public/myId。 在该组件中,我检查是否有成功验证的会话可用:

如果是,请转到内部页面,例如/share/internal/myId,并像往常一样使用导航栏等显示文档。 如果没有,请停留在页面上并加载文档,而不包含授权用户可能拥有的内容。
这样,用户可以始终共享相同的链接/share/public/myId,并根据自己的意愿将其转发给其他用户或非用户。

最好为不同的用户提供两条不同的路由。在这种情况下,用户可以共享指向其页面的链接,并定义该链接是仅由其他用户查看,还是由未经身份验证的用户查看。它提供两个链接并询问客户是没有意义的:将此链接用于其他用户,将此链接用于非用户。然后,您可以选择隐藏和显示。您可以使用*ngIf在页面上显示/隐藏组件。当然,我知道。但如下文所述,我不能像以前那样使用防护,必须放入多个ngIf,这不是一个好方法解决方案也是如此。