我正在尝试将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();
}
}
}
})
答案 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);