在我的項目中,我有一個服務,應用程序啓動時應該加載本地數據庫。爲此,使用功能GetData()
。我嘗試通過撥打ngOnInit()
生命週期掛鉤來使用它。它將結果記錄在控制檯中,但屬性datum
看起來沒有改變。異步函數在onInit生命週期鉤子中調用時無法按預期工作
但是,如果我將GetData()
方法添加到按鈕,屬性會更改並且數據按照預期顯示在控制檯中。
,我看遍了所有的消息表明,正確的方式來加載數據庫,如果我需要它的時候是使用ngOnInit()
鉤,這就是爲什麼我不笏調用GetData()
當從DOM的一些事件。
元器件
export class AppComponent implements OnInit {
datum;
constructor(private searchService: SearchService){ }
getData(){
this.searchService.getData().subscribe(
data => {
this.datum = data[0];
console.log(this.datum);},
err => console.log("E", err)
);
}
ngOnInit(){
this.getData();
}
title = 'app';
}
HTML
<div style="text-align:center">
<h1>
Welcome to {{title}}!!
Data: {{datum | json}}
</h1>
<button (click)="getData()">Click Me</button>
應用加載
按鈕點擊
編輯 實施getData()
與setTimeout()
由AlexKhymenko
getData(){
this.searchService.getData().subscribe(
data => {
setTimeout(() =>{
this.datum = data[0];
});
console.log(this.datum);},
err => console.log("E", err)
);
}
我會使用getter來處理這種情況:'get Datum(){return this.datum; };在視圖中:'Data:{{Datum}}'。數據不顯示可能有幾個原因:zone.js不會觸發,或者是其他。你也可以嘗試使用'Zone.run',但它應該已經被getter修復了。此外,始終初始化一個類屬性,如果理論上需要在視圖中顯示,請不要將其保留爲未定義。 NgZone參考資料:https://angular.io/api/core/NGZone。或者,直接綁定到dom中的getData,並返回observable,然後添加|異步 – briosheje
我真的不明白。 '吸氣'的目的和吸引力是什麼?它只是一個返回'datum'的函數嗎?什麼時候該被叫? –
@briosheje可能直接綁定到'getData()'是解決方案,因爲我使用'datum'只是因爲我沒有完全掌握observables的概念。我該怎麼做?它應該看起來像{{searchService.getData()? | async}}? –