3 回答
TA贡献1906条经验 获得超2个赞
usingsetTimeout 不是一个理想的解决方案,您可以直接在订阅回调函数中更新您的组件变量,并在您的模板中做任何您想做的事情。看我的例子
getItems() {
this.apollo
.watchQuery({
query: this.getItemsQuery,
})
.valueChanges.subscribe((result: any) => {
this.items = result?.data?.items;
});
}
并在模板中
<mat-option *ngFor="let item of items" [value]="item.price">
{{ item.name }}
</mat-option>
TA贡献1803条经验 获得超3个赞
也许不是理想的解决方案,所以我仍然愿意尝试其他事情,但我能够通过在服务中使用带有计时器的承诺,然后在组件中使用异步等待来获取组件中设置的值。
服务
getUsers(): any {
return new Promise((resolve, reject) => {
let me = this;
this.apollo.watchQuery<any>({
query: USER_SEARCH
})
.valueChanges
.subscribe(({ data, loading }) => {
this.loading = loading;
this.users = data.search;
});
setTimeout( function() {
if(me.users !== 'undefined'){
resolve(me.users)
}
}, 1000)
})
}
成分
async getUsers(): Promise<any> {
this.users = await this.userService.getUsers();
console.log(this.users);
}
这允许从服务中设置 this.users。据我所知,当 Angular 开始设置值时,Apollo 仍在运行查询,导致值最初显示为未定义,但我的服务在控制台中具有来自查询的值。不确定 Apollo 或 Angular 是否有更好的方法来解决这个问题,但如果有的话,我很想听听。
添加回答
举报