【发布时间】:2018-11-10 23:34:09
【问题描述】:
我在 Angular 6 数据绑定中使用异步函数时遇到问题:
<span *ngIf="application.status == 'in-progress'; else new">
{{getAssignedUser(application.user_id)}}
</span>
getAssignedUser() 是一个异步函数,它从 Firestore 获取文档,我想显示我从 Firestore 收到的分配用户的名字。这里唯一的问题是我无法显示名字值 OnInit。如果我插入一个按钮并添加一个单击事件,它会显示名称。
组件:
async getAssignedUser(id): Promise<string> {
if (id != null) {
return this._usersService
.getUserById(id)
.then(data => {
this.assignedUser = data.user_fname;
return this.assignedUser;
})
} else {
return null;
}
}
服务:
getUserById(id): any {
let user: any;
user = this.afs.collection('agents').doc(id).ref.get().then(function (doc) {
if (doc.exists) {
user = doc.data();
console.log(user);
return user;
}
else {
console.log('No such document');
}
}).catch(function (error) {
console.log('Error getting document: ', error);
})
return user;
}
有什么帮助吗?
【问题讨论】:
-
您能否为我们提供一个堆栈闪电战,以更清楚地说明您的示例?
-
你想显示什么?你正在做
{{getAssignedUser(application.user_id)}},但getAssignedUser返回一个Promise。您可以使用async管道,例如{{getAssignedUser(application.user_id) | async }} -
@user184994 我实际上正在尝试显示一个字符串。我不知道如何从 Promise 中获取字符串值。它与点击事件一起工作。更准确地说,我实际上是在使用 id 从另一个 Firestore 文档中检索数据并希望访问该文档的值。
-
您可以尝试使用
async管道来获取值,即{{getAssignedUser(application.user_id) | async }} -
这是从模板中调用函数的缺点之一:每个更改检测周期都会调用该函数。相反,为什么不在
ngOnInit中调用getUserById,而只在模板中使用{{assignedUser}}?
标签: javascript angular typescript google-cloud-firestore angular6