模块中的AngularFire2应用程序初始化与动态配置数据冲突

模块中的AngularFire2应用程序初始化与动态配置数据冲突,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我有一个问题,因为我的配置数据在运行时加载,而AnuglarFire2需要模块声明中的数据。我可以通过直接注入来访问数据,但我不知道如何将数据获取到模块文件中的AngularFireModule 在运行时加载数据是向应用程序获取配置数据的首选方法。所以,我不能改变这个过程。因此,我需要想出一个解决问题的办法 AngualrFire2设置页面 这是我的档案: **已加载配置数据(main.ts)** 配置数据从服务器中提取并传递到应用程序 然后我从直接注射中得到数据 **配置服务(app Con

我有一个问题,因为我的配置数据在运行时加载,而AnuglarFire2需要模块声明中的数据。我可以通过直接注入来访问数据,但我不知道如何将数据获取到模块文件中的AngularFireModule

在运行时加载数据是向应用程序获取配置数据的首选方法。所以,我不能改变这个过程。因此,我需要想出一个解决问题的办法

AngualrFire2设置页面

这是我的档案:

**已加载配置数据(main.ts)**

配置数据从服务器中提取并传递到应用程序

然后我从直接注射中得到数据

**配置服务(app Config.Service.ts)**

此时,我只知道如何从直接注入中获取配置数据。我不知道如何将其放入模块中以配置AngularFire2。以下是AngularFire2建议设置的代码:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { AngularFireModule } from 'angularfire2';

// Must export the config
export const firebaseConfig = {
  apiKey: '<your-key>',
  authDomain: '<your-project-authdomain>',
  databaseURL: '<your-database-URL>',
  storageBucket: '<your-storage-bucket>',
  messagingSenderId: '<your-messaging-sender-id>'
};

@NgModule({
  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(firebaseConfig)
  ],
  declarations: [ AppComponent ],
  bootstrap: [ AppComponent ]
})
export class AppModule {} 
从'@angular/platform browser'导入{BrowserModule};
从“@angular/core”导入{NgModule};
从“./app.component”导入{AppComponent};
从'angularfire2'导入{AngularFireModule};
//必须导出配置文件
导出常量firebaseConfig={
apiKey:“”,
身份验证域:“”,
数据库URL:“”,
storageBucket:“”,
messagingSenderId:'
};
@NGD模块({
进口:[
浏览器模块,
AngularFireModule.initializeApp(firebaseConfig)
],
声明:[AppComponent],
引导:[AppComponent]
})
导出类AppModule{}

非常感谢您为解决此问题提供的任何帮助。

调用
AngularFireModule.initializeApp
没有任何神奇之处,它只是:

导出类AngularFireModule{
静态初始化app(配置:FirebaseAppConfig,authConfig?:AuthConfiguration,appName?:string):ModuleWithProviders{
返回{
ngModule:AngularFireModule,
供应商:[
{provide:FirebaseUserConfig,useValue:config},
{provide:FirebaseConfig,useFactory:_getDefaultFirebase,deps:[FirebaseUserConfig]},
{提供:FirebaseAuthConfig,useValue:authConfig},
{提供:FirebaseAppName,useValue:appName}
]
}
}
}
请注意,Firebase配置是使用
FirebaseUserConfig
令牌提供的

AngularFireModule.initializeApp
中使用的一些令牌不是公共的,因此最好的方法是调用
AngularFireModule.initializeApp
并从结果中筛选配置提供程序。然后,可以使用动态获得的信息,在调用
platformBrowserDynamic
时使用配置提供程序:

导入{
AngularFireModule,
创作方法,
授权提供商,
FirebaseUserConfig
}来自“angularfire2”;
//调用initializeApp,传递空的配置对象:
const angularFireImport=AngularFireModule.initializeApp({}{
方法:AuthMethods.Password,
提供者:AuthProviders.Password
});
//从提供程序中筛选配置:
angularFireImport.providers=angularFireImport.providers.filter(
(provider:any)=>provider.provide!==FirebaseUserConfig
);
@NGD模块({
引导:[AppComponent],
进口:[
角火,
浏览器模块,
FormsModule
]
})
类AppModule{}
//在platformBrowserDynamic调用中提供Firebase配置:
函数processConfigData(配置,环境){
常量firebaseConfig={
apiKey:“”,
身份验证域:“”,
数据库URL:“”,
messagingSenderId:“”,
storageBucket:“”
};
平台浏览器动态([
{提供:“appConfig”,useValue:config},
{提供:“appEnv”,useValue:env},
{提供:FirebaseUserConfig,useValue:firebaseConfig}
]).bootstrapModule(AppModule);
}

这项工作非常有效!它解决了我想要的问题。谢谢如何从后端获取动态配置?@cartant关于如何使用最新版本的AngularFire2实现这一点,有什么想法吗?没有。我没用过。
import { Inject, Injectable } from '@angular/core';

// Code came from: 
https://gist.github.com/fernandohu/122e88c3bcd210bbe41c608c36306db9


@Injectable()

export class AppConfig {


constructor(@Inject("appConfig") private config, @Inject("appEnv") private env) {
}

/**
 * Use to get the data found in the second file (config file)
 */
public getConfig(key: any) {
  return this.config[key];
}

/**
 * Use to get the data found in the first file (env file)
 */
public getEnv(key: any) {
  return this.env[key];
} 
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { AngularFireModule } from 'angularfire2';

// Must export the config
export const firebaseConfig = {
  apiKey: '<your-key>',
  authDomain: '<your-project-authdomain>',
  databaseURL: '<your-database-URL>',
  storageBucket: '<your-storage-bucket>',
  messagingSenderId: '<your-messaging-sender-id>'
};

@NgModule({
  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(firebaseConfig)
  ],
  declarations: [ AppComponent ],
  bootstrap: [ AppComponent ]
})
export class AppModule {}