如何在角度2项目中分离管理员和前端Web

Mou*_*ady 2 angular2-routing angular

我将使用angular 2构建一个完整的项目,该项目包含管理面板和用户的前端Web.

我不知道如何将管理员与网络分开,我应该使用路由吗?但这需要我导入内部的所有组件,app.module.ts还是有另一种方法可以使用两个app.module.ts用于Web,一个用于管理员?

或者我该怎么办?

Chr*_*odz 9

我最近已经构建了这个,我所做的只是将路由分成两个不同的模块.

所以你有这个:

- +admin
  - routes
    - +dashboard
    - +login
    - ... etc
- +website
  - routes
    - +home
    - +profile
    - ... etc
Run Code Online (Sandbox Code Playgroud)

那么你想要做的是使用一个canLoad防护装置,以防止在没有授权的情况下加载模块.这将保护前端的管理区域,以便除非您是具有该权限的管理员,否则不会公开代码.

如果您不想将项目拆分为两个较小的项目,这是最简单的方法.由于在应用程序之间共享内容变得更加复杂,我不会亲自做到这一点.

编辑:

路由看起来像这样:

const routes: Routes = [
  {
    path: '',
    loadChildren: 'app/+website/website.module#WebsiteModule'
  },
  {
    path: 'admin',
    loadChildren: 'app/+admin-area/admin-area.module#AdminAreaModule'
  }
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes)
  ],
  exports: [
    RouterModule,
    AppComponent
  ],
  declarations: [
    AppComponent
  ]
})

export class AppRouterModule {}
Run Code Online (Sandbox Code Playgroud)

所以只/admin需要加载管理区域模块,这将有另一个路由器模块看起来像这样:

const routes: Routes = [
  {
    path: '',
    component: AdminAreaComponent,
    children: [
      {
        path: 'login',
        loadChildren: 'app/+admin-area/pages/+login/login.module#LoginModule'
      },
      {
        path: 'dashboard',
        loadChildren: 'app/+admin-area/pages/+dashboard/dashboard.module#DashboardModule',
        canLoad: [AuthGuardService]
      }
    ]
  }
];

@NgModule({
  imports: [
    ComponentsModule,
    SharedModule,
    RouterModule.forChild(routes)
  ],
  declarations: [
    AdminAreaComponent
  ]
})

export class AdminAreaRouterModule {}
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到/admin/dashboard受到检查用户角色的警卫的保护.