2

我有一个带有 canActivate 保护的延迟加载模块,在加载延迟加载模块后,页面以某种方式未经身份验证(例如通过在同一浏览器的不同选项卡中以不同角色登录),所以当我们尝试访问之前延迟加载的模块的组件,它们可以在以前加载的选项卡上成功访问。谁能解释为什么会发生这种情况或任何其他方式来处理这种情况?

注意:我根据用户角色加载了多个延迟加载的模块,延迟加载的模块可能具有相同的一个或多个子组件

代码:

主路由.module.ts

{
    path: 'admin',
    loadChildren: 'app/featureModules/admin/admin.module#AdminModule',
    canActivate: [ AdminGuardService]
},{
    path: 'staff',
    loadChildren: 'app/featureModules/staff/staff.module#StaffModule',
    canActivate: [ StaffGuardService]
  }

在人员-routing.ts

{
    path: '',
    loadChildren: 'app/featureModules/property-details-view/property-details-view.module#PropertyDetailsViewModule'
  }

在 admin-routing.ts

 {
    path: '',
    loadChildren: 'app/featureModules/property-details-view/property-details-view.module#PropertyDetailsViewModule'
  }

StaffGuardService 和 AdminGuardService 验证用户的角色并允许访问相应的路由。

4

1 回答 1

0

尝试这个

import { DashboardComponent } from './shared/dashboard/dashboard.component';
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuardService } from './services/auth-guard.service';

export const appRouters: Routes = [
  { path: 'login', loadChildren: 'app/shared/login/login.module#LoginModule' },
  {
    path: 'pages', component: DashboardComponent, children: [
      { path: '', loadChildren: 'app/pages/company/company.module#CompanyModule' },
      { path: 'company', loadChildren: 'app/pages/company/company.module#CompanyModule' },
      { path: 'user', loadChildren: 'app/pages/user/user.module#UserModule' },
      { path: 'school', loadChildren: 'app/pages/school/school.module#SchoolModule' },
      { path: 'activity', loadChildren: 'app/pages/activity/activity.module#ActivityModule' },
    ],
    canActivate: [AuthGuardService]
  },
  { path: '**', redirectTo: "pages" }
];

export const AppRoutingProviders: any[] = [

];

export const MyRouterModule: ModuleWithProviders = RouterModule.forRoot(appRouters);

//About AuthGuardService
@Injectable()
export class AuthGuardService implements CanActivate {

  constructor(private authService: AuthService, private router: Router,
    private activatedRoute: ActivatedRoute,
    private cookieService: CookieService) { }

  canActivate(_: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return hasLoginLogic // should be boolean type
  }
}
于 2018-08-14T08:56:20.727 回答