Firebase实时数据库离子返回null

时间:2018-12-26 17:04:20

标签: html angular firebase ionic-framework ionic4

我正在尝试使用Angular将Firebase数据库整合到我的Ionic应用程序中。我遵循的是AngularFire github页面(https://github.com/angular/angularfire2)上的说明,但是当我实际运行该应用程序时,我一直收到空响应。我也对db.object方法(db.object('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

1 个答案:

答案 0 :(得分:0)

您好,基兰,欢迎您来。您对提供的信息太多了,但是安全而不是后悔-对吗?

在示例中,您正在查看item是数据库中的节点。我认为您是Firebase的新手,所以我不会承担任何责任。...您是否使用过Firebase控制台? (https://console.firebase.google.com/project/PROJECT_NAME/database/PROJECT_NAME/data)允许您查看实时数据库内容的视图?在那里玩,并在数据库中添加一些“节点”。当您添加,编辑和删除数据时,它们具有协调一致的颜色……很酷,对吧?现在,删除测试节点并创建一个名为“ item”的节点,并添加一些子节点。

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

显示

长话短说-您的原始问题... item没什么特别的-使其成为您所谓的数据库节点。之所以得到null,是因为现在您缺少数据库中名称匹配的item

节点。