ped*_*nez 78 javascript json angular
我正在使用Angular 5,我使用angular-cli创建了一个服务
我想要做的是创建一个服务,读取Angular 5的本地json文件.
这就是我的......我有点卡住......
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能完成这个?
Bou*_*ine 110
首先,你必须注入HttpClient和不HttpClientModule,你必须删除第二件事.map((res:any) => res.json()),你将不再需要它了,因为新HttpClient会给你默认响应的身体,最后确保你输入HttpClientModule你的AppModule
:
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AppSettingsService {
constructor(private http: HttpClient) {
this.getJSON().subscribe(data => {
console.log(data);
});
}
public getJSON(): Observable<any> {
return this.http.get("./assets/mydata.json");
}
}
Run Code Online (Sandbox Code Playgroud)
将其添加到您的组件:
@Component({
selector: 'mycmp',
templateUrl: 'my.component.html',
styleUrls: ['my.component.css']
})
export class MyComponent implements OnInit {
constructor(
private appSettingsService : AppSettingsService
) { }
ngOnInit(){
this.appSettingsService.getJSON().subscribe(data => {
console.log(data);
});
}
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*une 19
您有另一种解决方案,直接导入您的json.
要编译,请在typings.d.ts文件中声明此模块
declare module "*.json" {
const value: any;
export default value;
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中
import { data_json } from '../../path_of_your.json';
console.log(data_json)
Run Code Online (Sandbox Code Playgroud)
Abo*_*zlR 14
假设您的项目的 src/app 文件夹中有一个 data.json 文件,其中包含以下值:
[
{
"id": 1,
"name": "Licensed Frozen Hat",
"description": "Incidunt et magni est ut.",
"price": "170.00",
"imageUrl": "https://source.unsplash.com/1600x900/?product",
"quantity": 56840
},
...
]
Run Code Online (Sandbox Code Playgroud)
import { Component, OnInit } from '@angular/core';
import * as data from './data.json';
@Component({
selector: 'app-root',
template: `<ul>
<li *ngFor="let product of products">
</li>
</ul>`,
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'Angular Example';
products: any = (data as any).default;
constructor(){}
ngOnInit(){
console.log(data);
}
}
Run Code Online (Sandbox Code Playgroud)
import { Component, OnInit } from '@angular/core';
import { HttpClient } from "@angular/common/http";
@Component({
selector: 'app-root',
template: `<ul>
<li *ngFor="let product of products">
</li>
</ul>`,
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'Angular Example';
products: any = [];
constructor(private httpClient: HttpClient){}
ngOnInit(){
this.httpClient.get("assets/data.json").subscribe(data =>{
console.log(data);
this.products = data;
})
}
}
Run Code Online (Sandbox Code Playgroud)
但首先我们需要添加一个键入文件,如下所示:
declare module "*.json" {
const value: any;
export default value;
}
Run Code Online (Sandbox Code Playgroud)
json-typings.d.ts将其添加到src/app 文件夹中的新文件中。
现在,您可以像 TypeScript 2.9+ 一样导入 JSON 文件。
import * as data from "data.json";
Run Code Online (Sandbox Code Playgroud)
jay*_*cer 12
对于Angular 7,我按照以下步骤直接导入json数据:
在tsconfig.app.json中:
添加"resolveJsonModule": true在"compilerOptions"
在服务或组件中:
import * as exampleData from '../example.json';
Run Code Online (Sandbox Code Playgroud)
然后
private example = exampleData;
Run Code Online (Sandbox Code Playgroud)
在寻找真正读取本地文件而不是从Web服务器读取文件的方法时,我发现了这个问题,我宁愿称之为"远程文件".
只需致电require:
const content = require('../../path_of_your.json');
Run Code Online (Sandbox Code Playgroud)
Angular-CLI源代码启发了我:我发现它们通过替换templateUrl属性包含组件模板,template通过require调用实际HTML资源来包含值.
如果使用AOT编译器,则必须通过调整tsconfig.app.json以下命令来添加节点类型定义:
"compilerOptions": {
"types": ["node"],
...
},
...
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试这个
在您的服务中编写代码
import {Observable, of} from 'rxjs';
Run Code Online (Sandbox Code Playgroud)
导入 json 文件
import Product from "./database/product.json";
getProduct(): Observable<any> {
return of(Product).pipe(delay(1000));
}
Run Code Online (Sandbox Code Playgroud)
在组件中
get_products(){
this.sharedService.getProduct().subscribe(res=>{
console.log(res);
})
}
Run Code Online (Sandbox Code Playgroud)
import data from './data.json';
export class AppComponent {
json:any = data;
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见本文。