Estou usando o Angular 5 e criei um serviço usando o angular-cli
O que eu quero fazer é criar um serviço que leia um arquivo json local para o Angular 5.
Isso é o que eu tenho ... Estou um pouco preso ...
import { Injectable } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
@Injectable()
export class AppSettingsService {
constructor(private http: HttpClientModule) {
var obj;
this.getJSON().subscribe(data => obj=data, error => console.log(error));
}
public getJSON(): Observable<any> {
return this.http.get("./assets/mydata.json")
.map((res:any) => res.json())
.catch((error:any) => console.log(error));
}
}
Como posso terminar isso?
javascript
json
angular
dhilt
fonte
fonte
HttpClientModule
não deve ser injetado no construtor.Respostas:
Primeiro você tem que injetar
HttpClient
e nãoHttpClientModule
, a segunda coisa que você tem que remover.map((res:any) => res.json())
você não vai precisar mais porque o novoHttpClient
vai te dar o corpo da resposta por padrão, finalmente certifique-se de importarHttpClientModule
em seuAppModule
:para adicionar isso ao seu componente:
fonte
Você tem uma solução alternativa, importando diretamente seu json.
Para compilar, declare este módulo em seu arquivo typings.d.ts
Em seu código
fonte
import { default as data_json } from '../../path_of_your.json';
Para o Angular 7, segui estas etapas para importar dados json diretamente:
Em tsconfig.app.json:
adicionar
"resolveJsonModule": true
em"compilerOptions"
Em um serviço ou componente:
E depois
fonte
Eu encontrei essa pergunta ao procurar uma maneira de realmente ler um arquivo local em vez de ler um arquivo do servidor web, que prefiro chamar de "arquivo remoto".
Basta ligar para
require
:O código-fonte Angular-CLI me inspirou: descobri que eles incluem modelos de componentes substituindo a
templateUrl
propriedade portemplate
e o valor por umarequire
chamada para o recurso HTML real.Se você usar o compilador AOT, terá que adicionar as definições de tipo de nó ajustando
tsconfig.app.json
:fonte
require
eu precisava instalar@types/node
executandonpm install @types/node --save-dev
conforme discutido aquiVeja este artigo para mais detalhes .
fonte
"allowSyntheticDefaultImports": true
'compilerOptions' ao meu tsconfig.json, mas apenas para impedir um erro de linting para TypeScript, NÃO um erro real.Tente isto
Escreva o código em seu serviço
importar arquivo json
Em componente
fonte
Vamos criar um arquivo JSON, vamos chamá-lo de navbar.json, você pode nomeá-lo como quiser!
navbar.json
Agora criamos um arquivo JSON com alguns dados do menu. Iremos para o arquivo de componente do aplicativo e colar o código abaixo.
app.component.ts
Agora, seu aplicativo Angular 7 está pronto para servir os dados do arquivo JSON local.
Vá para app.component.html e cole o seguinte código nele.
app.component.html
fonte
Usando Typescript 3.6.3 e Angular 6, nenhuma dessas soluções funcionou para mim.
O que funcionou foi seguir o tutorial aqui que diz que você precisa adicionar um pequeno arquivo chamado
njson-typings.d.ts
ao seu projeto, contendo este:Feito isso, eu poderia simplesmente importar meus dados JSON codificados:
e usá-lo em meu componente:
fonte