首页 文章

Angular 2 - 使用随机字符串设置基本href

提问于
浏览
0

我已经看到this post关于动态设置基本href,但是当用户访问Web应用程序时,它喜欢生成随机字符串作为基本href . 例如:

http://localhost:4200/ / home

http://localhost:4200/ / home

理解基本href可以像这样设置:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { APP_BASE_HREF, Location } from '@angular/common';

import { AppComponent } from './';
import { getBaseLocation } from './shared/common-functions.util';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    HttpModule,
  ],
  bootstrap: [AppComponent],
  providers: [
    appRoutingProviders,
    {
        provide: APP_BASE_HREF,
        useFactory: getBaseLocation,
        deps: [MyService] // Updated based on @Yakov Fain's comment
    },
  ]
})
export class AppModule { }

应该在getBaseLocation函数中生成,但是我需要在会话中保存这个以备将来使用,所以我将保存到一个注入getBaseLocation的共享服务中这个:

export function getBaseLocation(globalService: MyService) {
    let paths: string[] = location.pathname.split('/').splice(1, 1);
    if (paths && paths[0]) {
        // path contains the appId
        console.log("Existing appId: " + paths[0]);
        // Save appId for future use
        globalService.applicationId = paths[0];
    } else {
        let newAppId = Math.random().toString(36).substr(2, 5);
        // Save appId for future use
        globalService.applicationId = newAppId;
    }

    let basePath = globalService.applicationId;
    console.log("getBaseLocation : /" + basePath);
    return '/' + basePath;
}

它在访问localhost时工作正常:4200被重定向到localhost:4200 / / home . 但是,当我单击页面上的其他链接或只是刷新当前页面时,我在浏览器控制台中收到错误 . 错误是这样的:

GET http://localhost:4200/iun82/1.chunk.js 404(未找到)

错误错误:未捕获(在承诺中):错误:加载块1失败 .

错误:加载块1失败 .

请指教 . 谢谢!

1 回答

  • 1

    如果需要将服务注入工厂函数,请使用以下语法:

    providers: [
        appRoutingProviders,
        provide: MyService, 
        {
            provide: APP_BASE_HREF,
            useFactory: getBaseLocation, deps: [MyService]
        },
      ]
    

相关问题