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
的节点
我正在尝试使用 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