在目录root/src/app/lsg/demo-parent
中,我包含以下文件:
demo-parent.module.ts
demo-parent.component.ts
demo-parent.component.spec.ts
demo-parent.component.html
demo-parent.component.scss
demo-parent.routing.ts
en.json
fr.json
我需要在应用程序运行时访问en.json
和fr.json
中的内容。我使用的是第三方库ngx-translate
,用于i18n /国际化。 ngx-translate
希望您将所有[lang].json
个文件放在主root/src/assets/i18n
目录中,但对于我们的项目,我们需要将翻译文件放在与组件相同的目录中。
如果我在.angular-cli.json
文件中执行此操作:
"assets": [
"assets",
"favicon.ico",
"app"
],
(即在资产数组中添加" app")
...然后我可以访问每个组件目录中的.json
个文件。但我们并不想以这种方式公开app
。
当我运行ng serve
并转到devTools并查看" Sources"时,我可以在DemoParentModule
目录中看到以下内容:
DemoParentComponent.html
DemoParentComponent.ngfactory.js
DemoParentComponent.ngfactory.js? [sm]
DemoParentComponent_Host.html
DemoParentComponent_Host.ngfactory.js
DemoParentComponent_Host.ngfactory.js? [sm]
module.ngfactory.js
module.ngfactory.js? [sm]
我需要的一切都在那里......除了.json
文件。
如何在运行.json
时将ng serve
文件包含在这些目录中?
答案 0 :(得分:0)
您需要使用http调用请求.json
文件。要请求服务器资源,请更好地创建新服务以读取文件。然后将数据作为observable
返回,并在您的demo-parent component
中注册。
<强>服务强>
import { Injectable } from '@angular/core';
import { Http} from '@angular/http';
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class DataServices{
constructor(private http: Http) {
var obj;
}
public getEN(): Observable<any> {
return this.http.get("./en.json")
.map((res:any) => res.json())
.catch((error:any) => console.log(error));
}
public getFR(): Observable<any> {
return this.http.get("./fr.json")
.map((res:any) => res.json())
.catch((error:any) => console.log(error));
}
}
<强>组件强>
import {Component} from '@angular/core';
import {DataServices} from './data-services';
@Component({
selector: 'app',
template: `<*.htm>`
})
export class DemoParentComponent {
constructor(private service DataServices) {
}
init() {
let subscription = this.service.getFR.subscripe((data)=>{
console.log(data);
});
}
}