$ firebaseAuth与AngularFire 2.0.1和3.0.5火力地堡

问题描述:

我想升级到火力3和AngularFire 2.

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

let firebaseConfig = { apiKey: config.fbSecret, authDomain: config.firebaseAuthDomain, databaseURL: config.firebaseBase }, fbApp = firebase.initializeApp(firebaseConfig); let baseRef = firebase.database().ref()

然后“provided`的baseRef用于注射到其他模块(如我在旧版本做):

$provide.value('FirebaseBase', baseRef);

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

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

angular.js:4576 Uncaught Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp().

没有哪里的错误来自指示,但我有一些在run阶段验证码:

$firebaseAuth.$onAuthStateChanged(..

,我猜测它可能来自那里。我试图遵循移民指南,但似乎没有任何现实生活中的例子,我不清楚新的AngularFire与firebase.initializeApp的关系。

是否有示例应用程序在任何地方?我错过了什么吗?

+1

当您在同一个应用程序中多次调用firebase.initializeApp()时,会出现此错误。你只应该一次给它打电话。你确定你只运行一次配置代码吗?你真的在你的代码的其他地方调用initializeApp()吗?你能否更新你的答案以包含你的设置代码? – jwngr

+0

这是一个角度的应用程序。据我所知,配置只能在启动时运行一次。 (工作)应用程序的结构并没有真正改变。 InitializeApp不在客户端应用程序的其他任何位置运行。 该消息似乎表明,initializeApp根本没有运行,而不是它已经运行多次。那是错的吗? 发布所有设置代码是不太可能的,因为它有相当多的设置代码。 – kpg

+0

啊,是的,我误读了,对不起。看起来您的配置代码在开始使用Firebase之前并未实际运行。没有看到你的设置代码,我不知道我怎么能帮你。尝试削减它,你可能会发现自己的问题。另外,你是否已经使用AngularFire(https://github.com/firebase/angularfire)来简化一起使用Angular和Firebase? – jwngr

你需要调用在run块的开始初始化你的角度代码,因为你想在那里授权,我在我的几个早期的火力地堡

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); 
     }) 
     }, 
    } 
    }) 
+0

谢谢你正在寻找角度初始化的最佳实践。我遇到的所有文档都放在index.html中。从哪里得到这些信息? – jamie

+1

这只是我们在所有应用中使用的一种方法,只是将它放在index.html中似乎不正确。 –

如果你把它放在运行短语中,它会修复它。

+1

这个答案不清楚,应该进一步开发。请以帮助所有用户的方式解释答案,而不仅仅是提出问题的用户。 – LStarky