Angular 4:如何访问本地 json?

Posted

技术标签:

【中文标题】Angular 4:如何访问本地 json?【英文标题】:Angular4: how do access local json? 【发布时间】:2017-09-02 17:06:22 【问题描述】:

在 Angular2 中,你可以有一个文件夹 /data/ 和一个 json 文件,你可以在 localhost:4200/data/something.json 访问它。

这在 Angular4 中不再可能。

任何想法如何让它工作?

【问题讨论】:

angular4 ???什么是没听说过的 @AurA 看看现在 angular2 是什么***.com/a/43224781/5043867 ;) 酷!感谢您的信息, 【参考方案1】:

我遇到了同样的问题,我的 Observable Angular 服务位于“src/app/”文件夹内,它试图加载本地 JSON 文件。我试图将 JSON 文件放在同一个应用程序文件夹中,在一个新的“api”文件夹中,使用各种亲属/绝对路由,但没有帮助,我得到 404 错误。我把它放在“资产”文件夹中的那一刻,它就起作用了。我想还有更多吗?

也许这个链接有帮助:

COMPONENT-RELATIVE PATHS IN ANGULAR

【讨论】:

我认为 webpack,模块捆绑器,默认情况下会捆绑资产文件夹中的所有内容。 这是因为 angular-cli.json 中的 assets 数组中指定的所有内容都被复制并提供服务,因此在运行时可用。见github.com/angular/angular-cli/wiki/stories-asset-configuration【参考方案2】:

您可以在 angular.json 的 Assets 标签下添加文件夹位置

"assets": [
          "src/favicon.ico",
          "src/assets",
          "src/api"
        ],

【讨论】:

【参考方案3】:

基于此post,这里是 Angular 6+ 的完整答案:

来自angular-cli doc,json 可以被视为资产,可以通过标准导入访问,无需使用 ajax 请求。

假设您将 json 文件添加到“your-json-dir”目录中:

    将“your-json-dir”添加到 angular.json 文件中 (:

    "assets": [ "src/assets", "src/your-json-dir" ]

    允许将 json 模块导入到 typings.d.ts 文件中以防止打字稿错误:

    declare module "*.json" const value: any; export default value;

    在您的控制器/服务/任何其他文件中,只需使用以下相对路径导入文件:

    import * as myJson from 'your-json-dir/your-json-file.json';

【讨论】:

【参考方案4】:

当然有可能。假设这里是您的 json 文件

这是您调用 json 的代码

import  Injectable  from '@angular/core';
import  Http, Headers, Response  from '@angular/http';
import  Observable  from 'rxjs';
import 'rxjs/add/operator/map'

@Injectable()
export class YourService 

   constructor(private http: Http)  

   getAdvantageData()
      let apiUrl = './assets/data/api/advantage.json';
      return this.http.get(apiUrl)
      .map( (response: Response) => 
         const data = response.json();
         return data;
      );
     

【讨论】:

这之后应该在app模块中导入什么模块? @veerendragupta 我没有完全理解你的问题。请详细说明。【参考方案5】:

你也可以使用“require”;

let test = require('./test.json');

【讨论】:

你能告诉我我们如何在 Angular 项目中使用 ''require' 吗?【参考方案6】:

您可以使用此代码

@Injectable()
export class AppServices

    constructor(private http: Http) 
         var obj;
         this.getJSON().subscribe(data => obj=data, error => console.log(error));
    

    public getJSON(): Observable<any> 
         return this.http.get("./file.json")
                         .map((res:any) => res.json())
                         .catch((error:any) => console.log(error));

     

这里file.json 是您的本地json 文件。

请看这里

How to get a json file in angular2 using the Http class

另见 angular-cli 的 changlog for path

https://github.com/angular/angular-cli/blob/master/CHANGELOG.md#100-rc4-2017-03-20

【讨论】:

这是我以前在 Angular2 中所做的。在 Angular4 中,路由 ./file.json 不再有效。 @DanNeciu 也看到我的更新答案 这就是为什么框架很糟糕,所有这些只是为了打开文件,使用与文件系统本身交互的实际代码可能更容易做到这一点 @Preadeep。从 './example.json' 导入 * 作为数据;或者从本地资产订阅 .json 哪个是首选的,如果我们可以直接导入,为什么要订阅? @Mahi IMO 两者都是在您的项目中访问本地 JSON 数据的不同方式,您可以选择其中一种。 Offcourse 如果我们可以直接访问而不需要 HTTP 调用,那么简单的导入会是一个更好的主意。并且要从 observable 获取数据,我猜你需要订阅,但是是的,你可以从这里省略 .map【参考方案7】:

我想通了。

在 Angular2 中,我有 src 文件夹下的文件夹。 在 Angular4 中,您必须将它放在根文件夹中。

例子:

Angular2:

root/src/data/file.json

Angular4:

root/data/file.json

【讨论】:

您可以将文件放在任何您想要的位置,就像您使用整个路径,而不是请求中的相对路径:)

以上是关于Angular 4:如何访问本地 json?的主要内容,如果未能解决你的问题,请参考以下文章

找不到Angular 4本地工作区文件('angular.json')

使用来自本地 json 文件的 html 中的数据 - typescript, angular 7

如何将 Angular 4 localhost 提供给 ngrok?

从 Angular 前端到 json-server 的 GET 调用访问被 CORS 策略阻止的 XMLHttpRequest

angular学习笔记

如何将 Angular 2/4 应用程序部署到网络托管?