angular2firebase - 使用 Angular 6 的多个实例 [英] angular2firebase - multiple instances using Angular 6
问题描述
我正在使用 AngularFire2
升级到 Angular 6
.我的应用引用了 2 个 Firebase
项目,使用如下代码创建数据库引用:
I'm upgrading to Angular 6
using AngularFire2
. My app referenced 2 Firebase
projects using code like this to create the database reference:
public initFirebaseApp(config: FirebaseAppConfig, firebaseAppName: string) {
this._db = new AngularFireDatabase(_firebaseAppFactory(config, firebaseAppName));
}
此代码现已损坏.我明白了:
This code is now broken. I get this:
ERROR in src/app/services/firebase.service.ts(24,25): error TS2554: Expected 5 arguments, but got 1.
谢谢!
推荐答案
AngularFire 现在通过注入支持更多配置对象,这就是它期待更多参数的原因.目前需要:
AngularFire now support many more configuration objects via Injection now, which is why it's expecting more arguments. It currently takes:
constructor(
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
@Optional() @Inject(RealtimeDatabaseURL) databaseURL:string,
@Inject(PLATFORM_ID) platformId: Object,
zone: NgZone
)
虽然现在我们支持依赖注入,但我不建议像您那样直接初始化以支持多个应用程序.我们有一个未解决的问题来记录此问题,但您现在可以注入不同的 FirebaseOptions
通过 FirebaseOptionsToken
进入不同的组件,如果您需要在同一个组件中使用多个数据库,请使用以下内容:
Though now that we support dependency injection, I wouldn't suggest directly initializing like you are to support multiple apps. We have an open issue for documenting this but you can now inject different FirebaseOptions
via the FirebaseOptionsToken
into different components, if you need multiple databases in the same component use something like this:
@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
加入到你的组件中.
Then you can just rely on Dependency Injection to get AngularFireDatabaseAlpha
and AngularFireDatabaseBeta
into your component.
这篇关于angular2firebase - 使用 Angular 6 的多个实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!