Angular 4路由-基本href被预处理为hashPath



当angular应用程序的构建版本被放置在根目录中时,它会生成刚刚好的 url

http://thisismydomain.com/#/master/data-源管理/数据源/列表

但是,当它被放置在根目录中更深的某个位置时,我使用基本href,路由器在加载页面时仍然表现良好,但一旦加载,基本href就会被预处理到如下哈希路径:

http://thisismydomain.com/deeper/inside/#/deeper/inside/master/data-源管理/数据源/列表

预期Url:

http://thisismydomain.com/deeper/inside/#/master/data-源管理/数据源/列表

我发现问题与APP.module.ts的导入部分中的APP_BASE_HREF条目的注入有关?

providers: [
AuthenticationService,
KaribaService,
GlobalService,
NotificationService,
/*
{
provide: APP_BASE_HREF,
useFactory: getBaseHref,
deps: [PlatformLocation]
},
*/
CustomizationService

]

对此进行注释可以解决问题,但我需要它来在我的服务中注入BASE_HREF,以从assets文件夹中提取内容。帮助?

附言:我正在使用惰性加载。

我通过扩展HashLocationStrategy创建了一个CustomLocationStrategie来解决这个问题,因为这似乎是唯一的解决方案。

import {Injectable} from '@angular/core';
import {HashLocationStrategy} from "@angular/common";
@Injectable()    
export class CustomLocationStrategy extends HashLocationStrategy {
prepareExternalUrl(internal: string): string {
const url = this.getBaseHref() + '#' + internal;
return url;
}
}

在APP.module.ts 中导入了自定义类以及APP_BASE_HREF和LocationStrategy

import { APP_BASE_HREF, LocationStrategy } from "@angular/common";
import { CustomLocationStrategy } from './common/services/customLocationStrategy.service';

并在提供者部分添加了以下内容。

providers: [
{
provide: APP_BASE_HREF, 
useValue: window.location.pathname
}, 
{
provide: LocationStrategy, 
useClass: CustomLocationStrategy
}
]

最新更新