Angularjs $firebaseAuth搭配AngularFire 2.0.1和Firebase 3.0.5

Angularjs $firebaseAuth搭配AngularFire 2.0.1和Firebase 3.0.5,angularjs,firebase,firebase-realtime-database,angularfire2,Angularjs,Firebase,Firebase Realtime Database,Angularfire2,我正在尝试升级到Firebase 3和AngularFire 2 我已经在应用程序的配置阶段运行了initializeApp: 让firebaseConfig={ apiKey:config.fbSecret, authDomain:config.firebaseAuthDomain, 数据库URL:config.firebaseBase }, fbApp=firebase.initializeApp(firebaseConfig); 让baseRef=firebase.database().r

我正在尝试升级到Firebase 3和AngularFire 2

我已经在应用程序的配置阶段运行了
initializeApp

让firebaseConfig={
apiKey:config.fbSecret,
authDomain:config.firebaseAuthDomain,
数据库URL:config.firebaseBase
},
fbApp=firebase.initializeApp(firebaseConfig);
让baseRef=firebase.database().ref()

然后“提供”baseRef以注入其他模块(就像我在旧版本中所做的那样):

$provide.value('FirebaseBase',baseRef)

这样我就可以将
FirebaseBase
注入服务模块,并使用例如
FirebaseBase.child('profile')

这不会产生任何错误,但当应用程序运行时,我在控制台中收到此错误:

angular.js:4576未捕获错误:未创建Firebase应用程序“[默认]”-调用Firebase应用程序.initializeApp()。

没有迹象表明错误来自何处,但我在
运行
阶段有一些身份验证代码:

$firebaseAuth.$onAuthStateChanged(..

我猜它可能是从那里来的。我曾尝试遵循迁移指南,但似乎没有任何真实的例子,我也不清楚新的AngularFire如何与
firebase.initializeApp
结合


任何地方都有示例应用程序吗?我遗漏了什么吗?

您需要在angular code中的
运行
块的开头调用初始化,因为您试图在其中进行授权,我在早期的几次Firebase集成中犯了这个错误

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova'])

  .run(function ($ionicPlatform, FirebaseDB, $rootScope, $state) {

    FirebaseDB.initialize();

    // for authentication, managing the state if error..
    $rootScope.$on('$stateChangeError',
      function (event, toState, toParams, fromState, fromParams, error) {

        // if the error is "NO USER" the go to login state
        if (error === "NO USER") {
          event.preventDefault();
          $state.go('login', {});
        }
      });

  })
在我的firebaseService中

  .factory('FirebaseDB', function ($q, $state, $timeout) {
    var instance, storageInstance, unsubscribe, currentUser = null
    var initialized = false

    return {
      initialize: function () {

        // Not initialized so... initialize Firebase
        var config = {
            //SET YOUR CONFIG BLOCK HERE
        };

        // initialize database and storage
        instance = firebase.initializeApp(config);
        storageInstance = firebase.storage();

        // listen for authentication event, dont start app until I 
        // get either true or false
        unsubscribe = firebase.auth().onAuthStateChanged(function (user) {
          currentUser = user
          console.log("got user..", currentUser);
        })
      },
    }
  })

如果您将其放在运行短语中,它将修复此错误。

在同一个应用程序中多次调用firebase.initializeApp()时会出现此错误。您应该只调用它一次。您确定只运行一次配置代码吗?您真的在调用initializeApp()吗在代码中的其他地方?你能更新你的答案以包含你的设置代码吗?这是一个角度应用程序。据我所知,配置只能在启动时运行一次。的结构(工作)应用程序没有真正改变。InitializeApp在客户端应用程序的其他任何地方都没有运行。消息似乎表明InitializeApp根本没有运行过,不是说它已经运行过多次。这是错误的吗?不可能发布所有的安装代码,因为其中有很多。啊,是的,我误读了,抱歉。它是loo在您开始使用Firebase之前,您的配置代码实际上没有运行。在没有看到您的设置代码的情况下,我不确定如何帮助您。尝试缩减配置代码,您可能会自己发现问题。此外,您是否考虑过使用AngularFire()为了简化Angular和Firebase的一起使用?感谢您正在寻找Angular初始化的最佳实践。我遇到的所有文档都将其放在index.html中。这些信息是从哪里获得的?这只是我们在所有应用程序上使用的一种方法,只是似乎不适合将其放在index.html中。这个答案不清楚,应该ld有待进一步发展。请以帮助所有用户的方式解释答案,而不仅仅是询问问题的用户。