我是离子和棱角分明的新人。我想从API获取数据,但我无法访问数据。
这是我的代码
public items: any;
constructor(
public navCtrl: NavController,
public modalCtrl: ModalController,
public navParams: NavParams,
public http: Http) {
let headersToken = new Headers();
headersToken.append('Authorization', 'Bearer token here');
this.http.get('http://localhost:8000/api/data',{headers : headersToken}).map(res => res.json()).subscribe(data => {
this.items = data;
});
}
ionViewDidLoad(){
console.log(this.items);
}
IonViewDidLoad
的结果未定义。
答案 0 :(得分:0)
调用IonViewDiDLoad时,可能是您的HTTP调用Isnt已完成。尝试设置超时,看看它是否有效。否则,可能是您的HTTP请求未返回正确的数据
答案 1 :(得分:0)
你可以这样做:
注意:由于async
性质,您需要执行此操作,如下所示。
ionViewDidLoad(){
let headersToken = new Headers();
headersToken.append('Authorization', 'Bearer token here');
this.http.get('http://localhost:8000/api/data',{headers : headersToken}).map(res => res.json()).subscribe(data => {
this.items = data;
console.log(this.items);
});
}
答案 2 :(得分:0)
你需要了解为什么会这样。
Http.get是异步调用。
您编写代码的方式是在您从http呼叫接收输出或呼叫完成之前执行console.log(this.items);
。
要确保在通话后获得数据,您需要将控制台置于订阅中。
我在subscribe
中添加了以下console.log(this.items)
this.http.get('http://localhost:8000/api/data',{headers : headersToken})
.map(res => res.json())
.subscribe(data => this.items = data, // 1st param where you get data
(error) => console.log(error), // error if any
() => conosle.log("call is finished"+this.items) // call is completed. here you call ionViewDidLoad() as well.
);
}
ionViewDidLoad(){
console.log(this.items);
}
我希望这会有所帮助。