我有一个trainee.service.ts文件,其代码如下所示
import { Injectable } from '@angular/core';
import { WebApiService, API_CMD } from "../../../theme/";
import { Observable } from "rxjs/Observable";
import { Trainee } from './trainee';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';
@Injectable()
export class TraineeDataService {
trainee: Trainee[];
constructor(private webApi: WebApiService) {
}
getTrainee(): Trainee[] {
console.log(this.trainee);
return this.trainee;
}
getAllTrainee():void{
let url = API_CMD.GET_ALL_TRAINEE;
this.webApi.getData(url)
.subscribe(res=>{
this.trainee = res.json();
console.log(this.trainee);
});
}
}}
每当我在其他地方调用this.getTrainee()
时,此处的trainee
变量在方法中都是未定义的,但是console.log(this.trainee)
中的getAllTrainee()
确实会显示数据。我不知道为什么吗?
答案 0 :(得分:0)
代码
trainee: Trainee[];
只是类型转换属性受训者,没有为其设置值,因此在调用函数之前,它是未定义的。
如果要定义为以下内容
trainee: Trainee[] = [];
然后默认值为空白数组。
如果您在最终调用** getAllTrainee **之前调用 getTrainee 函数,则受训者的值将是不确定的,但是如果在调用之后调用 getTrainee 函数订阅操作已由功能 getAllTrainee 完成,那么它不是不确定的,而是响应的值。
this.trainee = res.json(); //you have now assigned a value to trainee
console.log(this.trainee); //now it will not be undefined but will be the value you have fetched from API.