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

2023-12-10

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

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

AngularFire2 设置页面https://github.com/angular/angularfire2/blob/master/docs/1-install-and-setup.md

这是我的文件:

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

function processConfigData(config, env) {
    platformBrowserDynamic([
      {provide: "appConfig", useValue: config},
      {provide: "appEnv", useValue: env}
    ]).bootstrapModule(AppModule);
}

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

然后我从直喷中获取数据。

** 配置服务 (app-config.service.ts)**

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];
} 

目前,我只知道如何从直接注入中获取配置数据。我不知道如何将其放入模块中来配置 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 {} 

非常感谢任何解决此问题的帮助。


致电给AngularFireModule.initializeApp没有做任何神奇的事情,它只是返回模块以及一些提供者:

export class AngularFireModule {
  static initializeApp(config: FirebaseAppConfig, authConfig?: AuthConfiguration, appName?: string): ModuleWithProviders {
    return {
      ngModule: AngularFireModule,
      providers: [
        { provide: FirebaseUserConfig, useValue: config },
        { provide: FirebaseConfig, useFactory: _getDefaultFirebase, deps: [FirebaseUserConfig] },
        { provide: FirebaseAuthConfig, useValue: authConfig },
        { provide: FirebaseAppName, useValue: appName }
      ]
    }
  }
}

请注意,Firebase 配置是使用FirebaseUserConfig token.

中使用的一些令牌AngularFireModule.initializeApp不是公开的,所以最好的方法是致电AngularFireModule.initializeApp并从结果中过滤配置提供程序。然后可以在调用中使用配置提供程序platformBrowserDynamic使用您动态获得的信息:

import {
  AngularFireModule,
  AuthMethods,
  AuthProviders,
  FirebaseUserConfig
} from "angularfire2";

// Call initializeApp, passing an empty config object:

const angularFireImport = AngularFireModule.initializeApp({}, {
  method: AuthMethods.Password,
  provider: AuthProviders.Password
});

// Filter the config from the providers:

angularFireImport.providers = angularFireImport.providers.filter(
  (provider: any) => provider.provide !== FirebaseUserConfig
);

@NgModule({
  bootstrap: [AppComponent],
  imports: [
    angularFireImport,
    BrowserModule,
    FormsModule
  ]
})
class AppModule {}

// Provide the Firebase config in the platformBrowserDynamic call:

function processConfigData(config, env) {

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

  platformBrowserDynamic([
    { provide: "appConfig", useValue: config },
    { provide: "appEnv", useValue: env },
    { provide: FirebaseUserConfig, useValue: firebaseConfig }
  ]).bootstrapModule(AppModule);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何获取 Instagram 个人资料图片

    在我的应用程序中 想要将 Instagram 个人资料图片放入他的帐户中 如何以编程方式从 Instagram 获取用户的个人资料图片 例如 使用 Instagram API 用户端点 https api instagram com v1
  • 找不到类型或命名空间名称[重复]

    这个问题在这里已经有答案了 我有一个C 包含多个项目的解决方案Visual Studio 2010 一个是测试项目 我称之为 PrjTest 另一个是Windows Forms Application项目 我称之为 PrjForm 还有Pr
  • 如何设置sbt的堆大小?

    我正在使用 SBT 0 12 0 我已经阅读了有关堆栈溢出的其他答案并遵循了它们 但是它们都没有帮助 例如 create ForkRun类 我在使用 sbt 期间没有观察到任何分叉进程 设置环境变量JAVA OPTS 它已设置 但 sbt
  • 匹配所有语言php字母的正则表达式

    我花了几个小时试图在 php 中找到正确的正则表达式来匹配任何语言字母 但防止它留出空间 我试过这个 p L 这没关系 但看起来它允许空间 然后我尝试了这个 w 看起来仍然有空间 有人可以帮忙吗 您需要指定 Unicode 修饰符u to
  • 在 Swift 中使用 AlamoFire 创建通用方法

    我使用 AlamoFire 进行 API 调用 并且在我的项目中都有这样的内容 static func login userName String password String gt User let parameters userNam
  • 如何在android中的警报对话框中添加阴影效果

    我想在警报对话框中添加阴影效果 我想要在我的对话框中出现这种类型的阴影效果在这里我发布了3个文件 第一个是style xml 第二个是theme java 第三个文件是demo bg xml文件 我已经尝试过这样的操作 Style xml
  • 从外部触发淘汰赛事件

    我有以下 html 表单中的 Select Element
  • 获取当前键盘光标位置

    无论如何 是否可以像获取鼠标光标位置一样全局获取键盘光标 插入符号 当前位置的坐标mouseLocation 不 没有办法在全球范围内做到这一点 如果您想在自己的应用程序中执行此操作 例如在 NSTextView 中 您可以这样做 NSRa
  • 为什么在 WPF 自定义 2D 绘图中使用具有破折号图案的笔会导致巨大(!)性能下降?

    希望有人能阐明这一点 以便我可以使用带有破折号图案的笔 我正在写一个可滚动的图表 Panel inside ScrollViewer实现IScrollInfo 在 WPF 中使用DrawingVisual s DataContext Dra
  • 使用 vs 2010 在负载测试中测试迭代设置

    我想测试 250 个并发用户的应用程序 我对负载测试设置有一些疑问 实现上述目标的正确设置应该是什么 我已将最大用户数设置为 250 并将运行设置中的测试迭代设置为 1 那么它会发送 250 个虚拟请求吗 or 我必须将最大用户数设置为 2
  • string类与其他类有何区别?

    我们可以做的 String string ourstring 但我们不能为用户定义的类创建这样的对象 UserClass uc Java 如何允许我们直接设置值java lang String只上课 java lang String是一个特
  • 如何在 IgGrid 单元格(Infragistics)中获取正则表达式?

    如何在 igGrid 更新中的 igTextEditor 上使用正则表达式 我尝试使用验证选项 但没有成功 schedulerTable igGrid columns scope schedulerColumns width 87 heig
  • 如何使用 React 删除待办事项列表中的项目

    我正在使用 React 创建一个待办事项列表应用程序 在我的应用程序中 当我单击 x 按钮删除项目并使用 console log 检查当前数组时 我可以看到该数组已正确更新为我要删除的项目从数组列表中 但 Dom 只渲染我想要删除的项目而不
  • 提高自定义无限滚动的速度

    我有一个自定义的无限滚动 运行完美 但速度非常慢 这是处理 ajax 请求的脚本 function ga infinite scroll trigger this on infinite scroll add filter woocomme
  • JFreeChart X 轴标签超出图表区域

    我有一个JFreeChart图表与DateAxis作为域 它看起来非常漂亮 但是最后一个轴标签有时会超出图表区域 这是要重现的示例代码 public class LineChart AWT extends ApplicationFrame
  • Visual basic 和 Json.net Web 请求

    基本上我想做的是制作一个程序来列出英雄联盟的游戏信息 使用 API 来提取数据 其工作原理是 您搜索用户名 它会返回链接到该帐户的整数 然后您使用该整数搜索该帐户的所有信息 EG 帐户级别 获胜 损失等 我遇到了一个我似乎无法弄清楚的问题
  • 安装tensorflow需要多少空间?

    我正在尝试跑步pip install tensorflow from a Jupyter笔记本 尝试运行它cmd给出一个更陌生的error 并且我的可用磁盘空间 目前还剩 1 2 GB 在安装过程中似乎会减少 然后我会看到 Errno 28
  • Spark - 评级文件中的相关矩阵

    我对 Scala 和 Spark 还很陌生 无法从评级文件创建相关矩阵 它类似于这个问题但我有矩阵形式的稀疏数据 我的数据如下所示
  • MySQL 进行多个连接时 tmp 表的密钥文件不正确

    我不经常来这里寻求帮助 但我对此感到非常沮丧 我希望有人以前遇到过这种情况 每当我尝试使用多个连接从表中获取记录时 我都会收到此错误 126 Incorrect key file for table tmp sql 64d 0 MYI tr
  • 模块中的 AngularFire2 应用程序初始化与动态配置数据冲突

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