在Angular中动态配置Firebase环境

时间:2019-07-26 06:48:40

标签: angular firebase ionic-framework firebase-realtime-database angular-module

我在移动应用程序中有一个数据列表,对于每个数据,我可以拥有不同的firebase配置文件。 要求是,当我单击任何数据时,它将向我们的服务器发出请求,并从此处拉出Firebase配置。

该配置可用于移动应用后,它将使用此配置与Firebase连接,然后检索数据并执行一些操作。 Requirement

有可能实现这一目标吗?

或更具体地说,我可以在我的构造函数中或mycomponent.component.ts中的ngOnInit()中执行AngularFireModule.initializeApp(environment),而不是在myModuleName.Module.ts中进行此操作。

2 个答案:

答案 0 :(得分:2)

通过执行AngularFireModule.initializeApp(environment),您可以做两件事:

  • 使用环境变量初始化AngularFire模块
  • 导入模块

因此,您至少需要将导入零件保留在模块中。也许您可以检查Firebase模块在导入后是否允许初始化,这意味着:

  1. 导入模块(在模块中)
  2. 稍后(当您获得配置时)“初始化” Firebase模块

如果这不可能,我建议延迟加载您的firebase模块: https://angular.io/guide/lazy-loading-ngmodules

Nb:由于您需要初始化firebase模块,因此可能需要将Firebase模块包装在标准模块中。

答案 1 :(得分:0)

这就是我的完成方式。我没有在应用程序模块中使用它,而是将它专门用于需要它的模块。

在module.ts

    import { AngularFirestoreModule } from 'angularfire2/firestore';
    import { AngularFireDatabaseModule } from 'angularfire2/database';
    @NgModule({
      declarations: [
       ...
      ],
      imports: [
        ...
        AngularFirestoreModule,
        AngularFireDatabaseModule],
      exports: [
       ...      ],
      providers: [
       ...
      ]
    })

在component.ts

import { AngularFirestore } from 'angularfire2/firestore';
import { _firebaseAppFactory } from "angularfire2/firebase.app.module";


  angFirestore: AngularFirestore

ngOnInit(){
    this.angFirestore = new AngularFirestore(_firebaseAppFactory(environment.firebase, environment.localAppName.toString()), false);
    }

ionViewWillUnload(){
      this.clearFirebaseInfo();
      if(this.angFirestore && this.angFirestore.app){
        this.angFirestore.app.delete();
      }
   }

  clearFirebaseInfo(){
    environment.apiKey= "";
    environment.authDomain= "";
    environment.databaseURL= "";
    environment.projectId= " ";
    environment.storageBucket= "";
    environment.messagingSenderId= "";
    environment.appId= "";
  }

以及用于设置Firebase环境信息的服务。