2014-11-04 91 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);