AngularFireDatabase注入失败求助:Angular聊天室搭建遇阻
我明白你现在的处境——为了贴合教程降级了AngularFire2版本,结果遇到了依赖注入的报错,这确实挺头疼的。咱们一步步来解决这个问题:
核心问题原因
在AngularFire2 4.x版本中,官方把旧的基于FirebaseListObservable这类API移到了angularfire2/database-deprecated路径下,对应的服务提供者模块也跟着迁移了。你现在的app.module.ts里导入的还是来自angularfire2/database的AngularFireDatabaseModule,它提供的是新版本的API服务,而你的chat.service.ts里注入的是旧版本(来自database-deprecated)的AngularFireDatabase,所以DI容器找不到对应的提供者,就抛出了那个错误。
具体修复步骤
修正app.module.ts中的模块导入路径
打开你的app.module.ts,找到这一行:import { AngularFireDatabaseModule } from 'angularfire2/database';把它替换成:
import { AngularFireDatabaseModule } from 'angularfire2/database-deprecated';这样模块就能正确提供你需要的旧版本
AngularFireDatabase服务了。确保依赖版本匹配
打开你的package.json,检查firebase的版本——AngularFire2 4.0.0-rc.1需要搭配Firebase 4.x系列的版本(比如^4.0.0)。如果你的firebase版本太高或太低,可能会出现隐性兼容问题。调整后记得重新执行npm install或者yarn install来同步依赖。保持chat.service.ts的导入不变
你之前修改的导入是对的,继续保留:import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated';
额外小提示
你的app.module.ts的imports数组里同时写了AngularFireModule和AngularFireModule.initializeApp(environment.firebase),其实后者已经包含了模块初始化,前者可以删掉,避免重复初始化的潜在问题:
imports: [ BrowserModule, RouterModule.forRoot(appRoutes), FormsModule, // 删掉这一行:AngularFireModule, AngularFireDatabaseModule, AngularFireAuthModule, AngularFireModule.initializeApp(environment.firebase) ],
做完这些修改后,重新启动你的Angular项目,应该就能正常访问聊天室页面,不会再出现重定向和提供者缺失的错误了。
内容的提问来源于stack exchange,提问作者onTheInternet

