从文件打字稿中获取json

时间:2017-01-20 19:23:27

标签: json angular typescript

我的服务中有此代码

import {Injectable} from '@angular/core';
import {Http, Headers, RequestOptions} from '@angular/http';
import 'rxjs/add/operator/map';
import {Client} from "../clients/client";
import {Observable} from "rxjs/Observable";


@Injectable()
export class ClientsService {


  private clientUrl = './client.json';

  private headers = new Headers({ 'Accept': 'application/json' });
  private options = new RequestOptions({ headers: this.headers });

  private client : Client;

  constructor(private http:Http) {}

  getClient() : Observable<any>{
    return this.http.get(this.clientUrl, this.options)
      .map(res => res);
  }
}

在我的组件中我称之为:

this.client = this.clientsService.getClient()
  .subscribe(data => {
    console.log(data);
  });

但我收到404错误

enter image description here

但我在我的服务所在的同一文件夹中有这个json文件。

enter image description here

出了什么问题?

3 个答案:

答案 0 :(得分:1)

您需要从基本路径中提供绝对路径。比如,path/to/Services/client.json

以下是一个示例:https://plnkr.co/edit/60E2qb9gOjvkEAeR5CtE?p=preview

答案 1 :(得分:0)

如果你使用angular-cli将json文件保存在Assets文件夹(与app dir并行)目录中

在您的情况下,您需要创建像assets / client.json

这样的文件
return this.http.get('/client.json'))
    .map((response: Response) => {
        console.log("mock data" + response.json());
        return response.json();
    }
    )
    .catch(this.handleError);
}

注意:这里你只需要在assets / client.json之类的资源文件夹中提供路径,然后你需要编写像/client.json这样的路径

如果你使用webpack,那么你需要在公共文件夹中遵循相同的结构,类似于资产文件夹。

答案 2 :(得分:0)

请将此代码添加到 typings.d.ts

文件中
declare module "*.json"
{ const value: any;
  export default value;
}
declare module "json!*"
{ const value: any;
  export default value;
}

,只需使用import * as data1 from 'path.json';

导入