如何读取 Json 文件并作为服务在任何地方使用?
How to read Json file and use in everywhere as service?
我需要在 Angular 中创建带有翻译的全局词典,并且我想在每个组件中使用该词典。
我创建了一个自定义服务:
import { Injectable } from "@angular/core";
import _dictionary from "../assets/js/dictionary.json";
interface IWords {
[key: string]: string;
}
@Injectable({
providedIn: "root"
})
export class DictionaryService {
private dictionary = new Map<string, IWords>();
constructor() {
console.log(_dictionary);
}
}
然后我将这个添加到提供商:@NgModule({ providers: [
DictionaryService ]});
如您所见,服务使用 json 包含翻译的文件。
问题是服务的构造函数不起作用,所以我看不到消息:
console.log(_dictionary);
要阅读 JSON 文件,您应该使用 http get 并订阅它
import { HttpClient } from '@angular/common/http';
...
this.http.get("../assets/js/dictionary.json").subscribe(data => {
console.log(data);
});
此致
您可以像这样导入 json 数据:
import * as _dictionary from "../assets/js/dictionary.json";
但是你不能在你的构造函数中注入它。您可以像这样将其包含在您的服务中:
export class DictionaryService {
private dictionary = _dictionary;
constructor() {}
}
旁注,对于翻译,有很棒的工具,例如 ngx-translate and transloco that load json files behind the scenes, and do it really well. I wrote an article explaining how to use them here。
您可能需要将 "resolveJsonModule": true
添加到 tsconfig.json 文件中的编译器选项。
我需要在 Angular 中创建带有翻译的全局词典,并且我想在每个组件中使用该词典。 我创建了一个自定义服务:
import { Injectable } from "@angular/core";
import _dictionary from "../assets/js/dictionary.json";
interface IWords {
[key: string]: string;
}
@Injectable({
providedIn: "root"
})
export class DictionaryService {
private dictionary = new Map<string, IWords>();
constructor() {
console.log(_dictionary);
}
}
然后我将这个添加到提供商:@NgModule({ providers: [
DictionaryService ]});
如您所见,服务使用 json 包含翻译的文件。
问题是服务的构造函数不起作用,所以我看不到消息:
console.log(_dictionary);
要阅读 JSON 文件,您应该使用 http get 并订阅它
import { HttpClient } from '@angular/common/http';
...
this.http.get("../assets/js/dictionary.json").subscribe(data => {
console.log(data);
});
此致
您可以像这样导入 json 数据:
import * as _dictionary from "../assets/js/dictionary.json";
但是你不能在你的构造函数中注入它。您可以像这样将其包含在您的服务中:
export class DictionaryService {
private dictionary = _dictionary;
constructor() {}
}
旁注,对于翻译,有很棒的工具,例如 ngx-translate and transloco that load json files behind the scenes, and do it really well. I wrote an article explaining how to use them here。
您可能需要将 "resolveJsonModule": true
添加到 tsconfig.json 文件中的编译器选项。