【问题标题】:404 pages and Lazy Loading in Angular2Angular2 中的 404 页面和延迟加载
【发布时间】:2017-02-04 10:45:14
【问题描述】:

我无法使用延迟加载模块让我的“404 页面”正常工作。当我在浏览器中输入一个随机网址时,我只看到一个空白页面,而不是我很酷的 404 页面。

这是我的路由配置

export const routes: Routes = [
  { path: '', redirectTo: 'dashboard', pathMatch: 'full'},
  { path: 'dashboard', loadChildren: 'app/dashboard/dashboard.module#DashboardModule'},
  { path: 'buckets', loadChildren: 'app/buckets/buckets.module#BucketsModule'},
  { path: '**', loadChildren: 'app/notfound/notfound.module#NotFoundModule'} 
];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes);

当我浏览 /buckets 时,我看到块正在延迟加载,它显示了在 Buckets 模块中配置的适当组件,没关系。

但它不适用于 404 错误页面。通常,路径的 '**' 应该适用于所有其他不存在的路由,但它不起作用。

有人可以帮忙吗?

-angular2 final (2.0.0)

【问题讨论】:

    标签: angular routing http-status-code-404


    【解决方案1】:

    URL 匹配不适用于通配符延迟加载的模块。我想知道您将在延迟加载模块内的路由中添加什么。

    话虽如此,您可能会尝试将通配符路由重定向到不同的路由,如下所示,

    { path: 'notfound', loadChildren: 'app/notfound/notfound.module#NotFoundModule'}
    { path: '**', redirectTo: '/notfound' }
    

    更新

    您可以在模块路由中提供一个空路径,以便它加载默认组件,

    const notfoundRoutes: Routes = [
      { path: '',  component: NotFoundComponent }
    ];
    

    这确保当您路由到未配置的路径时,它会延迟加载 NotFound 模块。

    看到这个Plunker!!

    希望这会有所帮助!

    【讨论】:

    • @webmaster:它可以检查解决方案中更新的 Plunker,我发现您添加的解决方案中没有正确配置路由,因此您必须导入模块。干杯!!
    • 干得好,Madhu,我为此苦苦挣扎了好几个小时,你的解决方案奏效了!这是我可以看到的延迟加载 404 错误页面的唯一方法...(这应该标记为正确答案)
    • "URL 匹配不适用于通配符延迟加载模块。" - 它会起作用,只是给定通配符匹配所有 URL 的情况。话虽如此,任何 URL 都会加载延迟加载的模块,因此它不再是真正的“延迟加载”模块。它只是一个应用程序块,在应用程序加载时从单独的块文件中保存和加载。但提议的解决方案似乎很可靠。
    【解决方案2】:

    好吧想通了,我做的是以下。

    在 AppModule 中导入 NotFound 模块

    @NgModule({
      imports: [
        BrowserModule,
        HttpModule,
        CoreModule.forRoot(),
        NotFoundModule,
        routing
      ],
      declarations: [
        AppComponent
      ],
      providers: [  ],
      bootstrap: [AppComponent]
    })
    

    在 NotFound 模块中我声明了一条路由(不是懒惰的)

    const routes: Routes =  [
      { 
        path: 'notfound', 
        component: NotFoundComponent
      }
    ]
    

    在我添加的 AppModule 路由中

    export const routes: Routes = [
      { path: '', redirectTo: 'dashboard', pathMatch: 'full'},
      { path: 'dashboard', loadChildren: 'app/dashboard/dashboard.module#DashboardModule'},
      { path: 'buckets', loadChildren: 'app/buckets/buckets.module#BucketsModule'},
      { path: '**', redirectTo: '/notfound' } 
    ];
    

    这样NotFound模块直接导入到应用程序中,所以它确实存在于应用程序上下文中。

    每次你输入一个不存在的路由,你都会被路由到 /notfound ;)

    【讨论】:

    • 嗯 - 我已经完成了这项工作,但我正在尝试将 404 页面移动到 LazyLoading(它只会在 1% 的时间里被击中,所以我不想像这样把它捆绑起来) .我无法让它与延迟加载一起使用...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2017-02-26
    • 2019-09-11
    相关资源
    最近更新 更多