遇到这个问题时,我试图获取我的 Firebase 数据库的一些数据:Getting the data from the first path (ex.: userData/tags) all work perfect,但是当我调用另一个函数从第二个路径获取数据时(例如:userData/tasks)没有任何作用,在我的控制台中没有任何错误,也没有记录任何侦听器。我以为这是我的代码错误或 firebase 问题,但后来我发现了一个有趣的故事。
我使用此代码从我的数据库中获取数据,并配置在服务类中。
@Injectable()
export class Database{
private allData: any;
constructor(){}
public getList(path: string): Observable<any> {
return new Observable((observer: any) => {
let onValueEvent = (snapshot: any) => {
this.ngZone.run(() => {
let results = this.handleSnapshot(snapshot.value);
console.dir(results);
observer.next(results);
});
};
firebase.addValueEventListener(onValueEvent, `/${path}`).then((msg)=>{console.dir(msg)}).catch((error)=>{console.error(error);});
}).share();
}
private handleSnapshot(data: any) {
//empty array, then refill and filter
this.allData = [];
if (data) {
for (let key in data) {
let result = (<any>Object).assign({ key: key }, data[key]);
this.allData.push(result);
}
}
return this.allData;
}
}
从一个名为 A 的带有 UI 界面的组件页面调用我的代码,一切正常。我创建了一个名为 B 的新组件,目前只有没有 UI 的后端代码:正如我之前所说,没有任何工作。
当我突然添加 UI 部分时,一切正常!!!
A&B的组件页面代码:page.ts(A&B)
export class Page{
public data$;
constructor(db: Database){
this.data$ = this.db.getList();
}
}
page.html(仅 A)
<ListView [items]="data$ | async">
<ng-template let-item="item">
<StackLayout>
<Label [text]='item.title'></Label>
</StackLayout>
</ng-template>
</ListView>
顺便说一句,查询数据库时也会发生这种情况。
我不能说这是否与 Nativescript、Firebase、Angular 或只是我的架构错误有关。最糟糕的是混合了后端和前端,通常是两个不同的开发人员构建这两个部分。