我正在使用AngularFire创建一个Web应用程序。我的几个控制器使用许多相同的功能来访问Firebase中的数据,因此我尝试编写一个服务,这样我就不必为每个控制器重写相同的功能。问题是我似乎无法将Firebase依赖项纳入服务。我正在使用以下代码:
angular.module("myApp", ["firebase","ngDraggable"])
.factory("GetData",['$firebase','FirebaseConn',function($firebase,FirebaseConn){
$firebase(new Firebase("https://XXXX.firebaseio.com/")).$asObject().$bindTo(scope, "firebaseData");
return {
};
}]);
但是当我尝试运行它时,我收到以下错误:
Unknown provider: FirebaseConnProvider <- FirebaseConn
我可以通过我的控制器访问Firebase,因此连接到firebase.js
或angularfire.js
并不是问题。
如何将Firebase注入我的服务中,以便我可以访问所有控制器中的数据?或者,有更好的方法来解决这个问题吗?我对Angular很新,所以如果有更好的方法在我的控制器之间共享功能,那我就听见了。
答案 0 :(得分:1)
您按照与控制器和指令相同的方式注入 。
这是AngularJS中的一个常见错误,它意味着您注射了一些不可注射的东西。它几乎总是意味着你错过了一个依赖(可能不是在这种情况下)或者你要求的东西一开始就不存在。
这几乎可以肯定是你的问题。您要求firebase
并获取它,但它无法找到FirebaseConn。那是什么,你用来跟踪你的连接的你的一些变量?因为你没有使用它,而AngularFire文档我也只是看过了。
考虑更多如下内容:
angular
.module("myApp", ["firebase", "ngDraggable"])
.service("firebaseManager",['$firebase', function($firebase) {
var ref = new Firebase("https://XXXX.firebaseio.com/"),
sync = $firebase(ref);
this.getData = function() {
return sync.$asObject();
};
});
显然,定制这个以适应。两条评论:
您可能需要服务而不是工厂。当您第一次开始使用AngularJS时,这是一个常见的混淆点。如果您计划以某种方式参与服务的实例化,则只需要工厂。服务只是工厂的一种快捷形式,具有最常见的用途 - 您可能想要的那种。
您现在将此服务firebaseManager
注入您的控制器。当您这样做时,他们将能够调用firebaseManager.getData()
以及您定义的任何其他方法。 firebaseManager
将是一个单身人士,因此所有这些都将通过一个常见的Firebase连接。