1

我的app.routes中有4条路由。Angular:有些路由使用PathLocationStrategy,但其他一些路由使用HashLocationStrategy

import { NgModule } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

export const pageRoutes: Routes = [ 
    {path: '', redirectTo: 'home', pathMatch: 'full'}, 
    {path: 'home', component: HomeComponent}, 
    {path: 'transaction', loadChildren: './app/transaction.module#TransactionModule'}, 
    {path: 'evidence', loadChildren: './app/evidence.module#EvidenceModule'} 
]; 

@NgModule({ 
    imports: [RouterModule.forRoot(pageRoutes)], 
    exports: [RouterModule], 
}) 
export class AppRoutingModule {} 

在app.routes中,我没有为LocationStrategy做任何特定的设置。由于transaction路由,我想使用angular2默认PathLocationStrategy,它不允许用户刷新页面。

但是对于evidence路由,我实际上希望用户能够刷新页面。所以我想在这里使用HashLocationStrategy。

这是evidence-routing.module

@NgModule({ 

      imports: [RouterModule.forChild([ 
      {path:':sessionId', component: EvidenceComponent} 
      { path: '**', redirectTo: '/404' }, 
      { path: '404', component: PageNotFoundComponent} 
      ])], 
      exports: [RouterModule], 
      providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}] 

    }) 
    export class EvidenceRoutingModule {} 

我想补充providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }]evidence-routing.module使HashLocationStrategy并且只适用于这条路线。

但是一旦我把它放在那里,整个应用程序将采用HashLocationStrategy,它也适用于事务路由。

我找不到任何解决方案。

对此问题有何建议?

非常感谢!

回答

2

对于不同的路由,您不能使用不同的LocationStrategy,该设置是针对Router而不是路由,并且一个应用只能有一个路由器。

您应该确保服务器配置正确,然后重新加载将适用于所有路线,即使使用PathLocationStrategy

确保您的服务器配置为支持HTML5 pushState。
这只是表示服务器返回index.html对未知资源的请求。