2017-07-07 224 views
0

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

在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,但如果应用程序加载会工作,然后用户通过routerlink导航到/lazy

是否可以导航到使用警卫的延迟加载模块的直接url?

+0

我已经将问题缩小到了我的服务中的异步问题。一旦完全解决,我会更新我的答案。 – Aluminum91

回答

0

我刚刚在我的应用程序中尝试过,它似乎工作正常。你是指在开发时运行吗?或者在部署到生产后? https://github.com/DeborahK/Angular-Routing/tree/master/APM-Final

哦......我只是看着您发布的URL接近,它看起来像你指的是生产:

,如果你想看看和比较,您可以在这里下载我的示例代码。您需要在您的服务器上实施URL重写以处理这些“深层链接”。你怎么做取决于你使用的服务器类型。

+0

我指的是从CLI开发的时候运行,但是你提出了一个关于URL重写的非常好的观点,也需要解决。 我翻看了你的示例项目,它确实应该像你的样子。我不知道我错过了什么。 – Aluminum91

+0

如果你运行我的工作是否像预期的那样工作?你使用什么版本的CLI? – DeborahK