Angular:如何从APP_初始值设定项中的路径创建语言?
因此,我们使用APP_初始值设定项在APP load上加载一些设置(通过http)。。。。但是,问题是这些设置取决于语言路径 所以 mydomain.com/en 获取不同于的设置 mydomain.com/it 我们如何(安全地)从应用程序路径确定语言 这就是我们现在的逻辑 site.service.ts: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(
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
let languageId = req.path.split('/')[1];
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传递到初始值设定项?