2014-11-04 66 views
0

我正在嘗試將Firebase注入提供商,因此我可以在應用配置中設置baseURL。我已經包含了所有必需的文件,並且正在注入Firebase提供程序,並且已經定義了Firebase依賴項。任何幫助將不勝感激。該錯誤消息我得到的是:將Firebase注入提供商時出錯

Error: [$injector:modulerr] Failed to instantiate module firebaseManager due to:

Error: [$injector:unpr] Unknown provider: $firebase

提供程序的代碼:

'use strict'; 
angular.module('firebaseManager',['firebase']) 
.provider("firebaseManager", function($firebase){ 
    var baseURL = "https://xxx.firebaseio.com"; 
    var rootRef = new Firebase(baseURL); 

    this.$get = function(){ 
     return{ 
      getInventory: function(){ 
       var ref = rootRef.child("inventory"); 
       var sync = $firebase(ref); 
       return sync.$asArray(); 

      } 
     } 
    } 

}) 

回答

1

首先,你沒有做任何事情在這裏需要調用一個供應商的複雜性。您可能不得不在沒有共享一個完全有效的理由,但我會繼續前進,建議你利用工廠來代替:

angular.module('firebaseManager',['firebase']) 
.factory("getInventory", function($firebase){ 
    var baseURL = "https://xxx.firebaseio.com"; 
    var rootRef = new Firebase(baseURL); 
    var sync = $firebase(rootRef.child('inventory')); 

    // this returns the same synchronized array each time, 
    // which is generally preferable 
    return sync.$asArray(); 

    // to return a copy each time (probably a bad idea), 
    // do something like this instead 
    //return function() { 
    // return sync.$asArray(); 
    //} 
}); 

具體回答你的問題,得到的依賴注入$ get方法,而不是提供者()函數。

angular.module('firebaseManager',['firebase']) 
.provider("firebaseManager", function(){ 
    var baseURL = "https://xxx.firebaseio.com"; 
    var rootRef = new Firebase(baseURL); 

    this.$get = ['$firebase', function($firebase){ 
     return{ 
      getInventory: function(){ 
       var ref = rootRef.child("inventory"); 
       var sync = $firebase(ref); 
       return sync.$asArray(); 

      } 
     } 
    }]; 
}); 

此外,你應該利用$窗口,而不是全局變量火力地堡的,因爲這與JSLint的/ jshint,並與當你使用單元測試嘲笑效果更好。

//$window can be injected as a dependency 
var rootRef = new $window.Firebase(baseURL);