将Firebase注入提供程序时出错

时间:2014-11-04 05:36:31

标签: angularjs firebase angularfire

我正在尝试将Firebase注入提供程序,因此我可以在app config中设置baseURL。我已经包含了所有必需的文件,我正在注入Firebase提供程序,并且我已经定义了Firebase依赖项。任何帮助将不胜感激。我得到的错误信息是:

  

错误:[$ injector:modulerr]由于以下原因无法实例化模块firebaseManager:

     

错误:[$ injector:unpr]未知提供者:$ 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 个答案:

答案 0 :(得分: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方法,而不是provider()函数。

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();

            }
        }
    }];
});

此外,您应该使用$ window而不是全局Firebase变量,因为当您使用单元测试时,这对jslint / jshint和模拟效果更好。

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