2017-04-07 18 views
7

W Angular2 możesz mieć folder/dane/i plik json, a możesz uzyskać do niego dostęp pod adresem localhost: 4200/data/something.json.Angular4: jak uzyskać dostęp do lokalnego json?

Nie jest to już możliwe w Angular4.

Jakieś pomysły, jak je uruchomić?

+0

kątowa4 ???co to nigdy o nim nie słyszało? – AurA

+1

@AurA zobacz tutaj, co jest obecnie angular2 http://stackoverflow.com/a/43224781/5043867;) –

+1

fajne! dzięki za informację, – AurA

Odpowiedz

3

można użyć tego kodu

@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)); 

    } 
} 

tutaj file.json jest lokalny plik json.

zobaczyć tutaj także

patrz również changlog kątowego-cli na ścieżce

+0

To właśnie robiłem w Angular2. W Angular4 trasa ./file.json już nie działa. –

+0

@DanNeciu jaki jest błąd, z którym się spotykasz? –

+0

@DanNeciu zobacz także moją Zaktualizowaną odpowiedź –

0

I zdobione.

W Angular2 miałem folder pod folderem src. W Angular4 musisz mieć go w folderze głównym.

przykład:

Angular2:

korzenia/src/dane/file.json

Angular4:

korzenia/dane/file.json

+0

Możesz umieścić plik gdzie chcesz, tak jak używasz całej ścieżki, a nie ścieżek względnych w twojej prośbie :) – Alex

5

Oczywiście to możliwe. Załóżmy, że tutaj jest plik json

enter image description here


A oto kod zadzwonić 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; 
     }); 
    } 
} 
+0

Jaki moduł powinien zostać zaimportowany w module aplikacji po tym? –

+0

@veerendragupta Nie dostałem twojego pytania całkowicie. Proszę trochę rozwinąć. –

4

byłem stoi ten sam problem, gdzie mój Obserwowalne kątowa serwis został znajdujący się wewnątrz "src/app /" i próbował załadować lokalny plik JSON. Próbowałem umieścić plik JSON w tym samym folderze aplikacji, w nowym folderze "api", użyłem różnych rodzajów krewnych/tras absolutnych, ale to nie pomogło i dostałem błąd 404. W momencie, w którym umieściłem go w folderze "aktywów" ... BAM !!! zadziałało. Myślę, że jest więcej do niej ...

Może ten link pomoże ...

COMPONENT-RELATIVE PATHS IN ANGULAR

+0

To działa! ale dlaczego? – mok

+1

Myślę, że webpack, moduł bundler, pakuje domyślnie wszystko z folderu asset. –

+0

Dzieje się tak dlatego, że wszystko, co podano w tablicy 'assets' w' angular-cli.json' zostaje skopiowane i udostępnione, dzięki czemu jest dostępne w środowisku wykonawczym. Zobacz https://github.com/angular/angular-cli/wiki/stories-asset-configuration – Nerman

1

Można użyć "wymagają" zbyt;

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

dzięki za odpowiedź –

Powiązane problemy