angular - angular2路由 Angular: 某些路由使用 PathLocationStrategy,但其他路由使用 HashLocationStrategy

  显示原文与译文双语对照的内容
55 2

我的app.routes 中有 4条线路。


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 {}



我没有为 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,它也适用于事务路由。

我找不到任何好的解决方案来处理这个问题。

关于这里问题的任何建议?

非常感谢!

时间: 原作者:

119 1

不能对不同的路由使用不同的LocationStrategy,这个设置为 Router,而不是路由,只有一个路由器。

你应该确保服务器配置正确,然后重新加载将使用 PathLocationStrategy的所有路由。

确保你的服务器配置为支持 HTML5 pushState 。
这意味着服务器将 index.html 返回到未知资源的请求。

...