Pau*_*dos 2 json rxjs typescript angular angular-httpclient
我已经阅读了我能找到的所有其他关于此的文章或帖子。我一生都无法弄清楚这个简单的任务我哪里出了问题。(特别是按照这个例子。)我一定做了一些明显愚蠢的事情,但我已经看这个很久了,我看不到它。
我在 asset/mockData 中有一个名为 isRecognized.json 的 json 文件。我已将 mockData 目录添加到我的 webpack 配置文件中,因此它包含在 /dist 目录中。如果我访问 http:localhost:4200/assets/mockData/isRecognized.json 我可以看到该文件,所以我知道它可用。
但是,当我尝试使用 HTTP 客户端检索文件时,无论我如何尝试,它都会抛出 404。
编辑:我使用的是 Webpack,而不是 Angular CLI。
应用程序组件.ts
import { MyService } from './services/my.service';
import { Component, OnInit, Renderer2 } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
/*
* Main app component that houses all views.
*/
@Component({
selector: 'app-comp',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
constructor(
private route: ActivatedRoute, private service: MyService
) {}
ngOnInit() {
this.service.isRecognized();
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class MyService {
constructor(private http: HttpClient) { }
isRecognized() {
this.getJSON('isRecognized').subscribe(data => {
console.log(data);
});
}
getJSON(fileName): Observable<any> {
return this.http.get('http://localhost:4200/assets/mockData/' + fileName + '.json');
}
}
Run Code Online (Sandbox Code Playgroud)
我在浏览器控制台中收到的错误是:
AppComponent_Host.ngfactory.js? [sm]:1 ERROR Error: [object Object]
at viewWrappedDebugError (core.js:9795)
at callWithDebugContext (core.js:15101)
at Object.debugCheckAndUpdateView [as checkAndUpdateView] (core.js:14628)
at ViewRef_.webpackJsonp../node_modules/@angular/core/esm5/core.js.ViewRef_.detectChanges (core.js:11605)
at core.js:5913
at Array.forEach (<anonymous>)
at ApplicationRef.webpackJsonp../node_modules/@angular/core/esm5/core.js.ApplicationRef.tick (core.js:5913)
at core.js:5746
at ZoneDelegate.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:391)
at Object.onInvoke (core.js:4756)
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中成功运行了此功能,只需使用如下 URL:
private productUrl = 'api/products/products.json';
Run Code Online (Sandbox Code Playgroud)
请注意,它没有localhost路径的一部分。
所以尝试更多类似这样的事情:
'assets/mockData/' + fileName + '.json'
Run Code Online (Sandbox Code Playgroud)
还要确保您的angular.json资产下列出了路径:
"assets": [
"src/favicon.ico",
"src/assets",
"src/api"
],
Run Code Online (Sandbox Code Playgroud)
注意:我也没有做任何修改我的 webpack 配置。(但我使用的是 CLI。)
如果您想查看一些访问 json 文件的工作代码,我这里有一个示例:
https://stackblitz.com/edit/github-gettingstarted-deborahk
| 归档时间: |
|
| 查看次数: |
2913 次 |
| 最近记录: |