Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular:如何从APP_初始值设定项中的路径创建语言?_Angular_Angular Universal - Fatal编程技术网

Angular:如何从APP_初始值设定项中的路径创建语言?

Angular:如何从APP_初始值设定项中的路径创建语言?,angular,angular-universal,Angular,Angular Universal,因此,我们使用APP_初始值设定项在APP load上加载一些设置(通过http)。。。。但是,问题是这些设置取决于语言路径 所以 mydomain.com/en 获取不同于的设置 mydomain.com/it 我们如何(安全地)从应用程序路径确定语言 这就是我们现在的逻辑 site.service.ts: load(): Promise<SiteConfiguration> { const promise = this.getSiteSettings().toPromise(

因此,我们使用APP_初始值设定项在APP load上加载一些设置(通过http)。。。。但是,问题是这些设置取决于语言路径

所以 mydomain.com/en 获取不同于的设置 mydomain.com/it

我们如何(安全地)从应用程序路径确定语言

这就是我们现在的逻辑

site.service.ts:

load(): Promise<SiteConfiguration> {
  const promise = this.getSiteSettings().toPromise();

  promise.then(config => {
    this.config = config;
     return config;
  }
  return promise;
}

getSiteSettings(): Observable<any> {
  // language logic supposed to be
  const langId = 'en';

  return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
  .map(res)
  .catch((error: any) => Observable.throw(error || 'Server error'));
}
load():承诺{
const promise=this.getSiteSettings().toPromise();
然后(配置=>{
this.config=config;
返回配置;
}
回报承诺;
}
getSiteSettings():可观察{
//语言逻辑应该是
const langId='en';
返回此.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
.map(res)
.catch((错误:any)=>可观察的.throw(错误| |“服务器错误”);
}

假设语言始终是路径中的第一个参数

假设您在后端使用express/nodejs

  • 在后端服务器上,从express请求中标识语言id

    let languageId = req.path.split('/')[1];
    
  • 在后端服务器上,提供语言URL

    renderModuleFactory(AppServerModuleNgFactory, {
        // Our index.html
        document: template,
        url: url,
        extraProviders: [
          provideModuleMap(LAZY_MODULE_MAP),
          {
            provide: 'languageId',
            useValue: languageId
          }
        ]
    
  • 修改初始值设定项服务以插入语言

    constructor(private http: HttpClient, @Inject(PLATFORM_ID) private 
    platformId: Object, @Optional() @Inject('languageId') protected languageId: string)    
    {
    }
    
  • 使用注入值

      getSiteSettings(): Observable<any> {
    
        const langId = isPlatformBrowser(this.platformId)? window.location.pathname.split('/')[1] : this.languageId;
        return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
        .map(res)
        .catch((error: any) => Observable.throw(error || 'Server error'));
      }
    
    getSiteSettings():可观察{
    const langId=isPlatformBrowser(this.platformId)?window.location.pathname.split('/')[1]:this.languageId;
    返回此.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
    .map(res)
    .catch((错误:any)=>可观察的.throw(错误| |“服务器错误”);
    }
    

  • 您不能使用window.location.pathname.split(“/”)[1]?但是如果您使用angular universal,您需要将url从服务器传递到初始值设定项,甚至只传递我们使用universal的语言……那么我如何将语言值从express server传递到初始值设定项?