base Href在Angular 2中区分大小写

时间:2017-01-19 13:11:42

标签: angular angular2-routing

我为Angular 2 app设置了这样的基础ref

<base href="MyApp"/>

如果我转到localhost / MyApp,一切正常。但是,如果我转到localhost / myapp,则无法识别路由。如何告诉Angular将基本路由视为不区分大小写?

4 个答案:

答案 0 :(得分:1)

您必须编写代码来覆盖基础href。

您可以覆盖的可能位置是  1. Angular2: Make route paths case insensitive

  1. 您编写自己的位置策略&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"/>(隐含的) 为我解决了这个问题。 虚拟目录现在不区分大小写。