我为Angular 2 app设置了这样的基础ref
<base href="MyApp"/>
如果我转到localhost / MyApp,一切正常。但是,如果我转到localhost / myapp,则无法识别路由。如何告诉Angular将基本路由视为不区分大小写?
答案 0 :(得分:1)
您必须编写代码来覆盖基础href。
您可以覆盖的可能位置是 1. Angular2: Make route paths case insensitive
您编写自己的位置策略&amp;忽略区分大小写。 在你的app.module.ts中,你告诉你的Angular 2应用程序在你的提供者部分使用自定义位置策略。
{提供:LocationStrategy,useClass:CustomPlatformLocation},
答案 1 :(得分:0)
我尝试了Parth方法,但是找不到用LocationStrategy
方法解决问题的方法。
基于this question的一些想法,最终得到了这样的内容:
import { DefaultUrlSerializer, UrlTree } from "@angular/router";
export class LowercaseUrlSerializer extends DefaultUrlSerializer {
parse(url: string): UrlTree {
let urlUpperBaseUrl = url;
if (url.startsWith("/app")) {
urlUpperBaseUrl = "/APP" + url.slice(4);
}
if (url.startsWith("app")) {
urlUpperBaseUrl = "APP" + url.slice(3);
}
return super.parse(urlUpperBaseUrl);
}
}
您还必须配置进样器:
@NgModule({
...
providers: [
...
{ provide: UrlSerializer, useClass: LowercaseUrlSerializer },
],
...
})
export class AppModule {
}
我希望它会成功!
答案 2 :(得分:0)
我在路由器配置中添加了键入的基本href作为路由,并将redirectTo属性设置为应用程序的默认路由,在我的情况下为“登录”,因此基本href的任何组合都可以使用。这更像是一种骇客。
我在app.component.ts文件中编写了该代码。
ngOnInit() {
var baseHref = window.location.pathname.split('/')[1];
if(baseHref != "" && baseHref != "login")
this.router.config.Add({path:baseHref,redirectTo:'/login',pathMatch:'full'});
}
注意:-根据其他答案的建议,LowerCaseUrlSerializer对我不起作用,因为它要求在我的应用中指定的所有路由都只能使用小写字母。
答案 3 :(得分:-1)
使用<base href="./">
而不是<base href="MyApp"/>
(隐含的)
为我解决了这个问题。
虚拟目录现在不区分大小写。