我正在尝试在我的新离子应用程序中包含一个API . 我正在使用使用Angularjs 5的Ionic 3.9.2 . 我对这些较新的更新没有任何经验 .
这包含在我的data.ts文件中(我的提供者)
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class DataProvider {
private url = "https://api.myjson.com/bins/opju3";
constructor(public http: HttpClient) {
console.log('Hello DataProvider test4');
}
getData(){
return this.http.get(this.url)
.subscribe(response => this.response = response.json());
}
}
在我的home.ts文件中,我有这个代码
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
//import { Observable } from 'rxjs/Observable';
import { DataProvider } from '../../providers/data/data';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(public navCtrl: NavController, public dataProvider:
DataProvider) {
console.log("before.getData");
}
ionViewDidLoad(){
this.dataProvider.getData();
}
}
值得注意的是,我在Cloud9 IDE中运行它,因此我没有最好的错误消息 . 当我今天运行时,我收到的错误是:
[16:17:43] typescript: src/providers/data/data.ts, line: 16
Property 'response' does not exist on type 'DataProvider'.
L15: return this.http.get(this.url)
L16: .subscribe(response => this.response = response.json());
[16:17:43] typescript: src/providers/data/data.ts, line: 16
Property 'json' does not exist on type 'Object'.
L15: return this.http.get(this.url)
L16: .subscribe(response => this.response = response.json());
谢谢你们!
编辑:你们都完美地回答了我的问题 . 它现在正在顺利运作 . 非常感谢 .
2 回答
新的
HttpClient
默认格式化对JSON的响应所以我们不再需要使用_112722解析它,如果你想解析你的响应你应该使用map
运算符,用于在你的json和它的情况下解析所需格式的响应返回一个可以订阅的观察者 . 例如:但它不再需要了
修改你的代码:data.ts
home.ts
关于 first error :
您的 class
DataProvider
中没有response
属性 . 您可以解决它声明属性:关于你的 second error :
Angular
HttpClient
已经返回 the body of the response ,而不是HttpResponse
(除非您使用observe option) . 所以你不需要调用response.json()
:我建议您从您的服务中返回observable并在您的页面中订阅它,就像在answer from @Vikas中一样 .