我尝试在两个不同的模块级别使用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?
答案 0 :(得分:0)
我刚刚在我的应用程序中尝试了这个,它似乎工作正常。你指的是在开发时运行吗?或者在部署到生产后?
如果您想查看并比较,可以在此处下载我的示例代码:https://github.com/DeborahK/Angular-Routing/tree/master/APM-Final
哦......我只是仔细看了你发布的网址,看起来你指的是制作。您需要在服务器上实现URL重写以处理这些“深层链接”。如何操作取决于您使用的服务器类型。