为什么这个值在 Angular 的其他地方都被认为是未定义的?

Why is this value considered undefined everywhere else in Angular?

我有图书和评论对象。

      books: Book[];
  reviews: Review[];

填充这些数组的信息由组件的函数引入。

  retrieveBooks(): void {
    this.bookService.getAll()
      .subscribe(
        data => {
          this.books = data;
        },
        error => {
          console.log(error);
        }
      );
  }

  retrieveReviews(): void {
    this.reviewService.getAll()
      .subscribe(
        data => {
          this.reviews = data;
        },
        error => {
          console.log(error);
        });
  }

代码有效,但无法识别对象数组。

它说未定义。

除非我在 .subscribe ( data => { } )

内工作

我可以输入一个 console.log,数组会按预期打印。

但是如果我试图在这个函数之外读取数组,它仍然会说未定义。

我不明白为什么会这样,因为我们已经把它写到我们一开始定义的组件数组中了。

不应该在整个组件中访问此数据吗?

您只定义了类型。 属性 没有赋值,因此它 returns undefined。你应该事先初始化一个空数组。

@Component(){}
export class MyComponent {
  books: Book[] = [];
  reviews: Review[] = [];

  ... more stuff
}

旁注:在 subscribe 中分配书籍和评论的值需要一些时间之前,值是 undefined(或者在我的例子中是 []).