angular2firebase - несколько экземпляров, использующих Angular 6 - PullRequest
0 голосов
/ 22 мая 2018

Я обновляюсь до 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 голосов
/ 22 мая 2018

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
)

Хотя теперь, когда мы поддерживаем внедрение зависимостей, я бы не стал предлагать прямую инициализацию, как вы, для поддержки нескольких приложений. У нас есть открытая проблема для документирования этого , но теперь вы можете вводить различные 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 },
    ...
  ],
  ...
})

Тогда вы можете просто положиться на Dependency Injection, чтобы получить AngularFireDatabaseAlpha и AngularFireDatabaseBeta в свой компонент.

...