簡體   English   中英

Angular - 在另一個組件中使用由回調設置的服務屬性

[英]Angular - Using a service property set by callback in another component

我正在嘗試使用等待回調的DataService屬性myData 但是當我調用DataComponent時它是未定義的。 我如何在那里訪問和使用它?

export class DataService {
  public myData;

  constructor(private http: HttpClient) {
    this.load().then((data) => {
      this.myData = data
    })
  }

  load() {
    return new Promise((resolve) => {
      this.http.get('https://reqres.in/api/users').subscribe(
        (res: any) => {
          console.log(res.data)
          resolve(res.data)
        },
        (error) => {
          console.log(error);
        }
      )
    })
  }
}
export class DataComponent implements OnInit {
  constructor(private dataService: DataService) {
    this.prepareData();
  }

  prepareData() {
    console.log(this.dataService.myData)
  }

  ngOnInit(): void {
  }
}

這是源代碼: https://stackblitz.com/edit/angular-ivy-kbpdpo

由於這是一個異步 function,因此您遇到了競態條件。

此更改有效: https://stackblitz.com/edit/angular-ivy-vf3llg

考慮閱讀https://angular.io/guide/http

就我個人而言,我只是讓服務返回原始數據並在其他地方對其進行操作,但如果需要,您可以利用我在更新示例中展示的響應。

這個問題和答案可能真的是這個問題的重復......

Angular教程中的pipe和抽頭方法是什么?

您的load()方法是異步的,這意味着它可以在 2 小時后返回響應,因此它將在 2 小時后執行您的回調,並且您正在同步詢問myData ,這意味着您現在正在詢問它,所以它不會不工作。

您必須等到返回答案,在您的代碼中沒有機會完成此操作,因此要么刪除 yourData 字段並將其訂閱到組件中,要么創建BehaviorSubject並向組件發出值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM