Angular 4 Lazy Load Module with canLoad或canActivate guard direct url /

时间:2017-07-07 21:44:25

标签: angular angular2-routing

我尝试在两个不同的模块级别使用canActivate和canLoad,我仍然无法直接访问延迟加载的模块。

在app.routing.module.ts

   import { AuthGuardImpl } from './lazy-load/auth-guard.service';
import {AuthGuard} from './lazy-load/auth.service';


const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'lazy', canLoad: [AuthGuardImpl], loadChildren: 'app/lazy-load/lazy-load.module#LazyLoadModule'},
  { path: '**', component: PageNotFoundComponent }
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forRoot(routes)
  ],
  exports: [RouterModule],
  declarations: [],
  providers: [AuthGuardImpl, AuthGuardService]
})

如果您不直接导航到http://url.com/lazy,则上述代码可以使用。但是转到http://url.com/然后按照路由器链接到懒惰模块。

同样我尝试过:

import { AuthGuard } from './auth.service';
import { AuthGuardImpl } from './auth-guard.service';


const lazyRoutes: Routes = [
  { path: '', component: LazyLoadComponent, canActivate: [AuthGuardImpl],
    children: [
    { path: 'dashboard',  loadChildren: 'app/lazy-load/dashboard/dashboard.module#DashboardModule' },
    { path: '', redirectTo: 'dashboard', pathMatch: 'full'},
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild(lazyRoutes)],
  exports: [RouterModule],
  declarations: [],
  providers: [AuthGuardImpl, AuthGuard]
})

这又不起作用直接转到http://url.com/lazy,但如果应用加载,则会有效,然后用户通过路由器链接导航到/lazy

是否可以导航到使用防护的延迟加载模块的直接URL?

1 个答案:

答案 0 :(得分:0)

我刚刚在我的应用程序中尝试了这个,它似乎工作正常。你指的是在开发时运行吗?或者在部署到生产后?

如果您想查看并比较,可以在此处下载我的示例代码:https://github.com/DeborahK/Angular-Routing/tree/master/APM-Final

哦......我只是仔细看了你发布的网址,看起来你指的是制作。您需要在服务器上实现URL重写以处理这些“深层链接”。如何操作取决于您使用的服务器类型。