Angular 4 - HTTP服务404.找不到JSON文件

edi*_*onv 8 angular-cli angular

我是角度新手,我在http服务中遇到问题.我试过this.http.get(' http://jsonplaceholder.typicode.com/posts/1 ')作为样本数据,它可以工作.但当我使用this.http.get('src/data/employees.json')时,它显示404(未找到)

employees.service.ts

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class EmployeesService {

    constructor(private http: Http) { }

    getEmployees() {
        this.http.get('src/employees.json')
            .map(response => response.json() )
            .subscribe(result => console.log(result) );
    }

}
Run Code Online (Sandbox Code Playgroud)

app.component.ts

import { Component } from '@angular/core';
import { EmployeesService } from './employees.service';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent {

    constructor(private employeesService: EmployeesService){}

    ngOnInit() {
        this.employeesService.getEmployees();
    }

}
Run Code Online (Sandbox Code Playgroud)

Kun*_*vič 18

如果您正在使用angular cli,则必须通过如下设置输出您的json文件.angular-cli.json:

"assets": [
        "assets",
        "src/employees.json"
      ],
Run Code Online (Sandbox Code Playgroud)

但我建议data您在src文件夹中创建一个文件夹,并将所有数据.json放入其中.然后让您的assets配置如下:

"assets": [
        "assets",
        "data"
      ],
Run Code Online (Sandbox Code Playgroud)

这样cli将总是输出整个data文件夹,因此您不必.json单独指定每个文件

如果您在更改.angular-cli.json期间ng serve更改以生效,则必须重新启动ng serve

  • 现在,您可以在“data”文件夹内拥有任意数量的文件夹,而无需单独配置每个文件夹,但如果您想在“data”外部创建更多静态文件夹,则必须以相同的方式进行配置。另请记住,默认的“angular-cli”静态文件夹称为“assets”,默认情况下它始终输出,因为它在“.angula-cli.json”中以相同的方式配置 (2认同)