【发布时间】:2017-11-02 22:16:23
【问题描述】:
我正在使用 Angular 4、NPM、Node.js 和 Angular CLI 开发一个项目。
我有一个非常不寻常的需要,即在没有 HTTP 请求的情况下将 JSON 加载到 Angular 服务中(使用 @Injectable),即它总是作为包的一部分在本地加载,而不是从服务器检索。
到目前为止,我发现的所有内容都表明您要么必须修改项目的 typings.d.ts 文件,要么使用 HTTP 请求从 /assets 文件夹或类似文件夹中检索它,这对我来说都不是一个选项。
我想要完成的是这个。给定以下目录结构:
/app
/services
/my-service
/my.service.ts
/myJson.json
我需要使用@Injectable 的my.service.ts 服务来加载JSON 文件myJson.json。对于我的特殊情况,my.service.ts 文件旁边将有多个 JSON 文件都需要加载。
澄清一下,以下方法对我不起作用:
使用 HTTP 服务从资产加载 JSON 文件
网址:https://stackoverflow.com/a/43759870/1096637
摘录:
// Get users from the API
return this.http.get('assets/ordersummary.json')//, options)
.map((response: Response) => {
console.log("mock data" + response.json());
return response.json();
}
)
.catch(this.handleError);
修改 typings.d.ts 以允许加载 JSON 文件
网址:https://hackernoon.com/import-json-into-typescript-8d465beded79
摘录:
解决方案:使用通配符模块名称
在 TypeScript 版本 2+ 中,我们可以在模块名称中使用通配符。在您的 TS 定义文件中,例如typings.d.ts,可以加这行:
declare module "*.json" {
const value: any;
export default value;
}
然后,您的代码将像魅力一样工作!
// TypeScript
// app.ts
import * as data from './example.json';
const word = (<any>data).name;
console.log(word); // output 'testing'
问题
有没有其他人有任何想法将这些文件加载到我的服务中而不需要这些方法中的任何一种?
【问题讨论】:
-
当您谈到
service时,您指的是网络服务还是角度服务? -
Angular 服务。
-
“与服务在同一目录中”是什么意思?你的意思是服务中有一个变量保存了 JSON 对象?
-
@StephenRios 刚刚注意到你用
service.ts更新了问题,你正在使用这个Angular 2 吗?如果是这样,请更新您的问题以反映这一点。 -
我也很困惑,
service.ts解决了歧义。 AngularJs 是什么,Angular2 是别的东西
标签: json angular angular2-services