angular2firebase - 使用Angular 6的多个实例

时间:2018-05-22 18:05:58

标签: angularfire2 angular6

我正在使用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.

谢谢!

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 },
    ...
  ],
  ...
})

然后,您可以依靠依赖注入将AngularFireDatabaseAlphaAngularFireDatabaseBeta放入组件中。