在我的项目中,我有一个服务,应用程序启动时应该加载本地数据库。为此,使用功能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}}? –