Firebase 实时数据库 Ionic 返回 null

Firebase Realtime Database Ionic returning null

我正在尝试使用 Angular 将 Firebase 数据库合并到我的 Ionic 应用程序中。我按照 AngularFire github 页面 (https://github.com/angular/angularfire2) 上的说明进行操作,但是当我实际上 运行 应用程序时,我一直收到空响应。我也对 db.object 方法 (db.object('item')) 的输入感到困惑。 'item'实际上代表什么?

这是我的 app.component.ts 文件

import { Component } from '@angular/core';
import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { MenuController } from '@ionic/angular';
import { AngularFireDatabase } from '@angular/fire/database';
import { Observable } from 'rxjs';


@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html'
})
export class AppComponent {

item: Observable<any>;
example: Observable<any>;

  constructor(
    private platform: Platform,
    private splashScreen: SplashScreen,
    private statusBar: StatusBar,
    private menu: MenuController,
    private db: AngularFireDatabase
  ){
    this.item = db.object('item').valueChanges();
    this.initializeApp();
  }



  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
    });
  }

  close(){
    this.menu.close();
  }
}

这是我的 app.component.html 文件

<ion-app>
    <ion-menu side="start" menuId="first">
      <ion-header>
        <ion-toolbar color="primary">
          <ion-title>Hi</ion-title>
        </ion-toolbar>
      </ion-header>
      <ion-content>
        <ion-list>
          <ion-item [routerLink]="['/orders']" routerLinkActive="active" (click)="close()" >My Orders</ion-item>
          <ion-item [routerLink]="['/apps']" routerLinkActive="active" (click)="close()">My</ion-item>
          <ion-item [routerLink]="['/pres']" routerLinkActive="active" (click)="close()">My</ion-item>
          <ion-item>{{ (item | async)?.name }}</ion-item>
        </ion-list>
        <li class="text" *ngFor="let item of items | async">
            {{ item | json }}
        </li>
      </ion-content>
    </ion-menu>
    <ion-router-outlet main></ion-router-outlet>
</ion-app>

这是我的 app.module.ts 文件

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { AngularFireModule } from '@angular/fire';
import { environment } from '../environments/environment';
import { AngularFirestoreModule } from '@angular/fire/firestore';
import { AngularFireDatabaseModule } from '@angular/fire/database';
import { AngularFireAuthModule } from '@angular/fire/auth';




@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule, FormsModule, IonicModule.forRoot(), AppRoutingModule, AngularFireModule.initializeApp(environment.firebase), AngularFireDatabaseModule, AngularFireAuthModule],
  providers: [
    StatusBar,
    GooglePlus,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

我的 Firebase 数据库的图像。这是我的应用程序名称下方可以看到的内容:https://pasteboard.co/HTxY5eC.png

嗨 Kiran,欢迎来到 SO。您提供的信息太多了,但安全总比后悔好 - 对吗?

在您查看的示例中,item 是数据库中的节点。我认为您也是 Firebase 的新手,所以我不会假设任何东西……您是否玩过 Firebase 控制台? (https://console.firebase.google.com/project/PROJECT_NAME/database/PROJECT_NAME/data) 允许您查看实时数据库内容的视图?在那里玩转并在数据库中添加一些 "nodes" 。当您添加、编辑和删除数据时,它们的颜色协调得很好……很酷,对吧?现在擦除您的测试节点并创建一个名为 "item" 的节点,并添加几个子节点。

在您的代码中,this.item = db.object('item').valueChanges(); 侦听存储在数据库 item 节点中的信息的变化...并将其粘贴到 this.item 变量中。您的 HTML 文件遍历 this.item 变量的任何内容并通过 *ngFor="let item of items | async

显示它

长话短说 - 你原来的问题... item 没什么特别的 - 随便你怎么称呼你的数据库节点。你得到 null 因为现在你的数据库中缺少一个匹配名称 item

的节点