我对angularjs2和ionic 2
中的变量this
有疑问
我有这个功能:
getAnuncio(id_anuncio){
console.log(id_anuncio)
var token=this.local.get('token')._result;
var headers= new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Token '+token);
datos="id_anuncio="+id_anuncio;
this.http.post('http://127.0.0.1:8000/envios/getAnuncioPorId/',datos , {
headers: headers
})
.subscribe(success => {
this.anuncio=success.json();
console.log("BIENNN");
console.log(success);
console.log(this.anuncio);
return this.anuncio;
}
}
我从另一个函数调用它:
cargarMapa(){
this.anuncio=this.getAnuncio(this.envio.anuncio);
console.log(this.anuncio);
//console.log(anuncio);
//this.getOferta(this.envio.oferta);
//console.log(this.oferta)
}
但是当我尝试记录this.anuncio
时,它是未定义的。
我需要将数据存储在变量中以便从其他函数中使用它。
有人可以帮助我吗?
以下是代码:https://github.com/p02diada/cyclaClientv2/blob/master/app/pages/sending-details/sending-details.js
答案 0 :(得分:0)
您可以通过这种方式利用do
运算符:
getAnuncio(id_anuncio){
console.log(id_anuncio)
var token=this.local.get('token')._result;
var headers= new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Token '+token);
datos="id_anuncio="+id_anuncio;
this.http.post('http://127.0.0.1:8000/envios/getAnuncioPorId/',datos , {
headers: headers
})
.map(res => success.json())
.do(data => {
this.anuncio = data;
});
}
这样您就可以在getAnuncio
方法之外订阅observable:
this.anuncio=this.getAnuncio(this.envio.anuncio).subscribe(
(anuncio) => {
// do something
console.log(anuncio);
}
);
不要忘记事情是异步的。
如果要实现某种缓存,请使用以下命令:
getAnuncio(id_anuncio){
if (this.anuncio) {
return Observable.of(this.anuncio);
} else {
var token=this.local.get('token')._result;
var headers= new Headers();
(...)
}
}
直接使用this.anuncio
,您无法确定数据是否存在......