Ionic+Firebase开发报错:Object(...) is not a function求助
解决Ionic + AngularFire2中
Object(...) is not a function报错 我之前也碰到过一模一样的问题,这个报错大概率是版本不兼容或者初始化配置不到位导致的,咱们一步步来排查和解决:
一、最常见的原因:AngularFire2与Ionic/Angular版本不匹配
你的代码写法是AngularFire2 4.x的风格,但如果你安装的是适配Angular 6+的AngularFire2 5.x+版本,就会出现这个函数调用错误——因为新版本的API做了大幅调整,比如模块导入路径、list方法的返回值类型都变了。
针对Ionic 3(对应Angular 5.x),你需要安装适配的AngularFire2和Firebase版本:
npm install angularfire2@4.0.0-rc.3 firebase@4.8.0 --save
二、检查AppModule的初始化配置
确保你已经在app.module.ts里正确导入并初始化了Firebase相关模块,这一步很容易被忽略:
import { NgModule } from '@angular/core'; import { IonicApp, IonicModule } from 'ionic-angular'; import { MyApp } from './app.component'; import { AngularFireModule } from 'angularfire2'; import { AngularFireDatabaseModule } from 'angularfire2/database'; import { ListPage } from '../pages/list/list'; // 替换成你自己的Firebase项目配置 const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_AUTH_DOMAIN", databaseURL: "YOUR_DATABASE_URL", projectId: "YOUR_PROJECT_ID", storageBucket: "YOUR_STORAGE_BUCKET", messagingSenderId: "YOUR_MESSAGING_SENDER_ID" }; @NgModule({ declarations: [ MyApp, ListPage ], imports: [ IonicModule.forRoot(MyApp), AngularFireModule.initializeApp(firebaseConfig), AngularFireDatabaseModule // 必须导入这个才能使用AngularFireDatabase ], bootstrap: [IonicApp], entryComponents: [ MyApp, ListPage ], providers: [] }) export class AppModule {}
三、调整ListPage的代码细节
虽然你的代码逻辑没问题,但可以做一点优化,明确Observable的类型,避免潜在的类型错误:
import { Component } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; import { AngularFireDatabase } from 'angularfire2/database'; import { Observable } from 'rxjs/Observable'; // 导入Observable类型 @Component({ selector: 'page-list', templateUrl: 'list.html' }) export class ListPage { informationslist: Observable<any[]>; // 明确类型为Observable数组 constructor( public navCtrl: NavController, public navParams: NavParams, private afDB: AngularFireDatabase ) { try{ // 注意这里要使用this.afDB,规范写法需添加this this.informationslist = this.afDB.list('information', ref => ref.orderByChild('datetime')).valueChanges(); }catch(e){ console.error('获取数据出错:', e); } } }
四、验证RxJS版本
AngularFire2 4.x依赖RxJS 5.x,如果你项目里装了RxJS 6+,也会出现兼容性问题。可以查看package.json里的rxjs版本,确保是5.x:
"rxjs": "^5.5.11"
如果版本不对,执行安装命令:
npm install rxjs@5.5.11 --save
做完以上几步,重新启动项目(ionic serve),应该就能解决这个报错了。
内容的提问来源于stack exchange,提问作者Kode Ch
相关产品推荐
相关产品推荐

