加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用多个模块/文件的Login页面和主视图(带嵌套视图)的Angular.io

发布时间:2020-12-17 17:51:53 所属栏目:安全 来源:网络整理
导读:使用Angular 4的路由和我的功能的单独文件/模块,我试图让我的应用程序始终首先显示登录屏幕,然后在用户登录后切换到我的主视图(所有路由都通过身份验证保护,除了登录一个). 我在Plunker中创建了一个测试应用程序,在应用程序中有关于我需要的功能的注释,而不
使用Angular 4的路由和我的功能的单独文件/模块,我试图让我的应用程序始终首先显示登录屏幕,然后在用户登录后切换到我的主视图(所有路由都通过身份验证保护,除了登录一个).

我在Plunker中创建了一个测试应用程序,在应用程序中有关于我需要的功能的注释,而不是目前正在发生的事情:
????https://plnkr.co/edit/MGIGH4xpKZOtgCBl5lam

我在大多数示例代码(like this one)中遇到的问题是登录后路由到的组件没有任何嵌套视图.我通过将所有路由放在一个文件中来使我的应用程序工作,但我更喜欢拆分每个功能的路由.然而,一旦我这样做,事情开始变得不稳定:

>单击登录按钮可显示俱乐部组件,而不会嵌套在主导航模板中;加上俱乐部组件即使在认证完成之前也会显示.
>如果我通过在URL中键入“members”来手动导航,则成员列表会正确显示,但是当我单击某个成员时,它会显示“找不到页面”而不是成员详细信息视图

但它很接近 – 在网址中输入“club”或“members”将强制显示登录页面,当我点击登录按钮时,它将显示正确的页面,嵌套在主导航视图中.然后我可以使用主导航链接在“俱乐部”和“成员”之间来回翻转并注销.

我认为问题可能与我正在进行延迟加载的方式有关吗?

const routes: Routes = [
  { path: '',component: MainNavComponent,canActivate: [AuthGuard],children: [
      { path: 'club',loadChildren: 'app/club.module#ClubModule'},{ path: 'members',loadChildren: 'app/members.module#MembersModule'},{ path: '',redirectTo: 'club',pathMatch: 'full' }
    ]
  }
];

我按照angular.io路由文档和these suggestions来使它工作正常,但我无法弄清楚最后一点是搞砸了.我真的很感激任何帮助!

解决方法

我解决了各种问题,并将其添加到下面的演示中.

>不要将延迟加载的模块导入应用程序模块,因为这会导致它们立即加载.这也使模块路由优先于AppModule路由.

@NgModule({
  declarations: [
    AppComponent,PageNotFoundComponent
  ],imports: [
    BrowserModule,AuthModule,// ClubModule,// MainNavModule,// MembersModule,AppRoutingModule
  ],providers: [],bootstrap: [AppComponent]
})
export class AppModule { }

>延迟加载的模块应该都像自己的app一样运行,因此应该配置路由,以便每个模块的根组件都有一个空路径.

// club-routing.module.ts
const routes: Routes = [
  { path: '',component: ClubComponent }
];
// members-routing.module.ts
const routes: Routes = [
  {
    path: '',component: MembersComponent,children: [
      { path: ':id',component: MemberDetailComponent }
    ]
  }
];

>最后,应用程序模块应具有路由器要解析的默认路径.在我的示例中,我将其解析为路由模块,因为它受到保护的保护,但您可以轻松地将其路由到登录模块.

// app-routing.module.ts
const routes: Routes = [
  { path: '',loadChildren: 'app/main-nav.module#MainNavModule' },{ path: 'login',component: LoginComponent },{ path: '**',component: PageNotFoundComponent }
];

Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读