我最近开始将我的iOS应用程序移动到也是一个Web应用程序。我不知道这个实现是否正确。它有效,但如果有人可以请让我知道它是否正确。
以下是我的LicenceService中的功能:
get retriveLicences():Licence[] {
const licences: Licence[] = [];
this.afDatabase.list(this.basePath).valueChanges().subscribe((snapshot) => {
snapshot.forEach(element => {
const licenceObject = <any>element
licences.push(
new Licence(
licenceObject.name,
licenceObject.logoUrl,
licenceObject.maxUsers,
licenceObject.currentUserCount,
licenceObject.startDate,
licenceObject.endDate
)
);
});
});
return licences
}
答案 0 :(得分:4)
使用rxjs运算符,您可以在订阅之前“转换”快照:
getLicences(): Observable<Licence[]> {
return this.afDatabase
.list(`/whatever`)
.valueChanges()
.map(licenceObjects => {
return licenceObjects.map(licenceObject => new Licence(
licenceObject.name,
licenceObject.logoUrl,
licenceObject.maxUsers,
licenceObject.currentUserCount,
licenceObject.startDate,
licenceObject.endDate
));
})
}
但是,如果您使用数据库中的确切变量名称创建一个界面,那么您的生活将变得更加容易,因为angularfire2会为您进行转换:
interface Licence {
name: string;
logoUrl: string;
maxUsers: number;
currentUserCount: number;
startDate: number;
endDate: number;
}
getLicences(): Observable<Licence[]> {
return this.afDatabase.list<Licence>(`/whatever`).valueChanges();
}
现在,在您的组件中,您可以从服务中获取observable,并使用异步管道或任何对您的应用程序更有意义的方式解开它。 我希望这有用!