开发者问题收集

在成功调用 angular 后获取未定义

2018-03-23
14240

我已成功调用 API 并从中获取数据,但是如果我读取变量,则会得到 “未定义”

调用 api 获取数据的服务类

export class DataServiceService {

   constructor(private http: Http) { }

   url: string = "http://localhost:60263/api/values";

   getEmployeesData(): Observable<EmployeeDetails[]> {
      return this.http.get(this.url).map((res: Response) => res.json());
   }
}

订阅数据

export class AppComponent {

   emp: EmployeeDetails[];

   constructor(private dataServe: DataServiceService) { }

   ngOnInit() {
     this.dataServe.getEmployeesData().subscribe(res => this.emp = res);
   }

   clEmployeesCount: Number = this.emp.length; **Getting undefined here**
   clShowEmployee: boolean = false;
   clCreateEmployee: boolean = false;
}

但是这在 HTML 部分运行良好

<div *ngIf="emp">
  <ul *ngFor="let user of emp">
   <li>{{user.ID}}</li>
 </ul>
</div>
2个回答

由于这是异步调用,因此你无法知道何时返回。 因此将赋值移至 subscribe 函数中

this.dataServe.getEmployeesData().subscribe(res =>  {
   this.emp = res;
   this.clEmployeesCount = emp.length;
});
Suren Srapyan
2018-03-23

只有在执行

clEmployeesCount: Number = this.emp.length;

Getting undefined here 之后,才会为 this.emp 分配值。

您可以移动

clEmployeesCount: Number = this.emp.length; 

在 subscribe 内部,或者最初分配一个空数组

emp: EmployeeDetails[] = [] 

以避免错误。将其移动到 subscribe 中是正确的方法。

Franklin Pious
2018-03-23