Estoy usando Angular 5 y he creado un servicio usando el angular-cli
Lo que quiero hacer es crear un servicio que lea un archivo json local para Angular 5.
Esto es lo que tengo ... estoy un poco estancado ...
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));
}
}
¿Cómo puedo terminar esto?
javascript
json
angular
dhilt
fuente
fuente
HttpClientModule
no debe inyectarse en constructor.Respuestas:
Primero tienes que inyectar
HttpClient
y noHttpClientModule
, segundo que tienes que eliminar.map((res:any) => res.json())
ya no lo necesitarás porque el nuevoHttpClient
te dará el cuerpo de la respuesta por defecto, finalmente asegúrate de importarHttpClientModule
en tuAppModule
:para agregar esto a su componente:
fuente
Tienes una solución alternativa, importando directamente tu json.
Para compilar, declare este módulo en su archivo typings.d.ts
En tu código
fuente
import { default as data_json } from '../../path_of_your.json';
Para Angular 7, seguí estos pasos para importar directamente datos json:
En tsconfig.app.json:
añadir
"resolveJsonModule": true
en"compilerOptions"
En un servicio o componente:
Y entonces
fuente
Encontré esta pregunta cuando buscaba una manera de leer realmente un archivo local en lugar de leer un archivo del servidor web, que prefiero llamar "archivo remoto".
Solo llama
require
:El código fuente de Angular-CLI me inspiró: descubrí que incluyen plantillas de componentes reemplazando la
templateUrl
propiedad portemplate
y el valor por unrequire
llamada al recurso HTML real.Si usa el compilador AOT, debe agregar las definiciones de tipo de nodo ajustando
tsconfig.app.json
:fuente
require
necesitaba para instalar@types/node
mediante la ejecuciónnpm install @types/node --save-dev
como se discute aquíConsulte este artículo para obtener más detalles. .
fuente
"allowSyntheticDefaultImports": true
a mi tsconfig.json 'compilerOptions', pero solo para detener un error de linting para TypeScript, NO un error real.Prueba esto
Escribe código en tu servicio
importar archivo json
En componente
fuente
Vamos a crear un archivo JSON, lo llamamos navbar.json, ¡puedes nombrarlo como quieras!
navbar.json
Ahora hemos creado un archivo JSON con algunos datos de menú. Iremos al archivo de componentes de la aplicación y pegaremos el siguiente código.
app.component.ts
Ahora su aplicación Angular 7 está lista para entregar los datos del archivo JSON local.
Vaya a app.component.html y pegue el siguiente código en él.
app.component.html
fuente
Usando TypeScript 3.6.3 y Angular 6, ninguna de estas soluciones funcionó para mí.
Lo que sí funcionó fue seguir el tutorial aquí que dice que necesita agregar un pequeño archivo llamado
njson-typings.d.ts
a su proyecto, que contiene esto:Una vez hecho esto, simplemente podría importar mis datos json codificados:
y usarlo en mi componente:
fuente