我正在使用Angular 6
升级到AngularFire2
。我的应用使用这样的代码引用了2个Firebase
项目来创建数据库引用:
public initFirebaseApp(config: FirebaseAppConfig, firebaseAppName: string) {
this._db = new AngularFireDatabase(_firebaseAppFactory(config, firebaseAppName));
}
此代码现已破裂。我明白了:
ERROR in src/app/services/firebase.service.ts(24,25): error TS2554: Expected 5 arguments, but got 1.
谢谢!
答案 0 :(得分:2)
AngularFire现在通过Injection支持更多的配置对象,这就是为什么它需要更多的参数。目前需要:
constructor(
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
@Optional() @Inject(RealtimeDatabaseURL) databaseURL:string,
@Inject(PLATFORM_ID) platformId: Object,
zone: NgZone
)
虽然现在我们支持依赖注入,但我不建议直接初始化,就像你支持多个应用程序一样。 We have an open issue for documenting this但您现在可以通过FirebaseOptions
将不同的FirebaseOptionsToken
注入不同的组件,如果您需要在同一组件中使用多个数据库,请使用以下内容:
@Injectable()
export class AngularFireDatabaseAlpha extends AngularFireDatabase { }
@Injectable()
export class AngularFireDatabaseBeta extends AngularFireDatabase { }
export function AngularFireDatabaseAlphaFactory(platformId: Object, zone: NgZone): Project1AngularFireAuth {
return new AngularFireDatabaseAlpha(environment.firebase[0], 'alpha', undefined, platformId, zone)
}
export function AngularFireDatabaseBetaFactory(platformId: Object, zone: NgZone): Project2AngularFireAuth {
return new AngularFireDatabaseBeta(environment.firebase[1], 'beta', undefined, platformId, zone)
}
@NgModule({
...,
providers: [
...,
{ provide: AngularFireDatabaseAlpha, deps: [PLATFORM_ID, NgZone], useFactory: AngularFireDatabaseAlphaFactory },
{ provide: AngularFireDatabaseBeta, deps: [PLATFORM_ID, NgZone], useFactory: AngularFireDatabaseBetaFactory },
...
],
...
})
然后,您可以依靠依赖注入将AngularFireDatabaseAlpha
和AngularFireDatabaseBeta
放入组件中。