2016-06-28 73 views
1

我想升級到火力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

回答

2

你需要調用在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中似乎不正確。 –

-2

如果你把它放在運行短語中,它會修復它。

+1

這個答案不清楚,應該進一步開發。請以幫助所有用戶的方式解釋答案,而不僅僅是提出問題的用戶。 – LStarky