使用angular4将hash-url更改为hash-bang url

时间:2018-07-02 05:32:02

标签: node.js angular prerender angular4-router

我正在使用angulr4,这是我的URL http://localhost/#/login.html,我想将此URL更改为http://localhost/#!/login.html。我找到了angularjs的解决方案,但没有找到angular4的解决方案。我正在为SEO使用“ Prerender Node”,因为这是链接https://www.npmjs.com/package/prerender-node

预先感谢

1 个答案:

答案 0 :(得分:3)

您追求的是APP_BASE_HREF。在路由模块app-routing.module.ts中,添加到模块providers数组{ provide: APP_BASE_HREF, useValue: '!' }中,并在文件顶部导入import { APP_BASE_HREF } from '@angular/common';。看来您已经在使用HashLocationStrategy

示例 app-routing.module.ts

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

const routes: Routes = [
  { path: '**', redirectTo: '404-not-found' }
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes, {
      useHash: true
    })
  ],
  exports: [ RouterModule ],
  providers: [
    { provide: APP_BASE_HREF, useValue: '!' }
  ]
})
export class AppRoutingModule {}

进一步阅读Angular 4文档

PathLocationStrategy

  

PathLocationStrategyLocationStrategy,用于配置   Location服务在浏览器的path中表示其状态   网址。

     

如果您使用的是PathLocationStrategy,则必须提供APP_BASE_HREF   或在文档中添加基本元素。该URL前缀将是   在生成和识别URL时保留。

     

例如,如果您提供APP_BASE_HREF中的'/my/app'并致电   location.go('/foo'),浏览器的网址将变为   example.com/my/app/foo

     

类似地,如果您将<base href='/my/app'/>添加到文档中并调用   location.go('/foo'),浏览器的网址将变为   example.com/my/app/foo

HashLocationStrategy

  

您可以通过提供HashLocationStrategy   useHash: true作为一个对象的第二个参数   RouterModule.forRoot中的AppModule

APP_BASE_HREF

  

... APP_BASE_HREF令牌表示要使用的基本href ...    一个字符串,代表生成和识别URL时应保留的URL前缀