在方法本身内显示值,但在其外部显示未定义的消息
Ubigeo.service.ts
lisProvinciaByDepartamento( ubigeoId: string): Observable<Ubigeo[]> {
let ubigeo$ = this.http
.get(`${this.baseUrl}/provincia/${ubigeoId}`, {headers: this.getHeaders()})
.map(mapUbigeos)
.catch(handleError);
return ubigeo$;
}
Detail.component.ts
cargaPronvicia(ubigeoId: string) {
this._ubigeoService
.lisProvinciaByDepartamento(ubigeoId)
.subscribe((p) => {
this.provinciaSeleccionada = p
.find(item =>
item.ubigeoId.substr(2, 2) === ubigeoId.substr(2, 2));
this.provincias = p;
console.log(this.provinciaSeleccionada); //2
});
console.log(this.provinciaSeleccionada); //1
}
答案 0 :(得分:3)
因为当您将其用作观察对象时,数据检索相对 async 。 所以永远不要直接使用变量,
良好做法
如果订阅为空,请跳过订阅。
cargaPronvicia(ubigeoId: string) {
this._ubigeoService
.lisProvinciaByDepartamento(ubigeoId)
////////////////////////////////////////////////////////////////
.skipWhile((p) => p === undefined)
////////////////////////////////////////////////////////////////
.subscribe((p) => {
this.provinciaSeleccionada = p
.find(item =>
item.ubigeoId.substr(2, 2) === ubigeoId.substr(2, 2));
this.provincias = p;
console.log(this.provinciaSeleccionada); //2
});
console.log(this.provinciaSeleccionada); //1
}
无论您使用订阅的变量,请检查它是否包含数据,您的案例中的示例将是
if(this.provinciaSeleccionada){
console.log(this.provinciaSeleccionada);
}
更新1: