Angularjs 将angularFireCollection注入angular.js配置以在resolve中使用

Angularjs 将angularFireCollection注入angular.js配置以在resolve中使用,angularjs,angularfire,Angularjs,Angularfire,最近我一直在尝试Angular.js。作为这项工作的一部分,我创建了一组非常简单的控制器,其中包含ng视图和模板,以根据请求的路由进行触发。我使用angularFireCollection只是为了从Firebase获取一个数组。这在不构成ng视图一部分的thumbnailController中工作良好 我的问题是,除了流入thumbnailController的数据外,我还需要另外两个控制器才能访问数据。我最初只是简单地将数据设置为$rootScope的一部分,或者将ng视图设置为设置thumb

最近我一直在尝试Angular.js。作为这项工作的一部分,我创建了一组非常简单的控制器,其中包含ng视图和模板,以根据请求的路由进行触发。我使用angularFireCollection只是为了从Firebase获取一个数组。这在不构成ng视图一部分的thumbnailController中工作良好

我的问题是,除了流入thumbnailController的数据外,我还需要另外两个控制器才能访问数据。我最初只是简单地将数据设置为$rootScope的一部分,或者将ng视图设置为设置thumbnailController的div的子视图

然而,从这个角度来看,问题是每个子控制器可能会在Firebase实际提供数据之前尝试在模板中设置数据

根据此问题的答案,解决方案似乎是使用resolve。但是,使用下面的代码(同时引用angularFireCollection),我得到一条错误消息,表明angularFire是未知的提供者。我的理解是,下面的代码应该足够了,我还想补充一点,在thumbnailController中使用angularFireCollection可以很好地工作,正如我所说的

我还尝试了使用.$inject将angularFire/aFCollection直接注入控制器中,但由于它被认为是未知的提供者,因此出现了类似的问题

如果可能的话,有人能就这里可能存在的问题提出建议吗

var galleryModule = angular.module('galleryModule', ['firebase']);

galleryModule.config(['$routeProvider', 'angularFire', function($routeProvider,  angularFire){
$routeProvider.
    when('/', {
        controller: initialController,
        templateUrl: 'largeimagetemplate.html',
        resolve: {images: angularFire('https://mbg.firebaseio.com/images')}
    }).
    when('/view/:id', {
        controller: mainimageController,
        templateUrl: 'largeimagetemplate.html',
        resolve: {images: angularFire('https://mbg.firebaseio.com/images')}
    }).
    otherwise({
        redirectTo: '/'
});
}]);

galleryModule.controller('thumbnailController', ['$scope', 'angularFireCollection',       function($scope, angularFireCollection){
    var url = 'https://mbg.firebaseio.com/images';
    $scope.images = angularFireCollection(url);
}]);

function initialController($scope,images){
    $scope.largeurl = images[0].largeurl;
}


function mainimageController($scope, images, $routeParams){
  $scope.largeurl = images[$routeParams.id].largeurl;
}

我有机会对此进行了一点深入研究——似乎在.config部分不能使用常规服务。我将在控制器中实例化angularFire,而不是使用resolve,例如:

厨房模块
.value(“url”https://mbg.firebaseio.com/images")
.controller('thumbnailController',['$scope','angularFireCollection','url',
函数($scope,angularFireCollection,url){
$scope.images=angularFireCollection(url);
}])
.controller('initialController',['$scope','angularFire','url',
函数($scope、angularFire、url){
angularFire(url,$scope,'images')。然后(function(){
$scope.largeurl=$scope.images[0]。largeurl;
});
}])
.controller('mainimageController',['$scope','angularFire','$routeParams','url',和,
函数($scope、angularFire、$routeParams、url){
angularFire(url,$scope,'images')。然后(function(){
$scope.largeurl=$scope.images[$routeParams.id].largeurl;
});
}]);
这并不是没有效率的,因为Firebase只从URL加载了一次数据,所有后续承诺几乎都会立即通过手头已有的数据得到解决


然而,我希望看到angularFire在$routeProvider中坚定地工作。在我们找到更优雅的解决方案之前,您可以使用此方法作为解决方案。

我认为这应该是一个解决方案,但是,我的理解(可能是错误的)是,只有将控制器定义为单独的功能,才能在routeProvider机制中识别控制器。使用上述方法会给我带来一条错误消息(但这可能是由于我的业余水平,所以我接受了你的答案,非常感谢你的关注)。将跟踪AF的进度&感谢您提供了一款出色的产品。您会遇到什么错误?上面的代码应该可以正常工作(如果不完全正确,我实际上并没有运行它)。如果找不到原因,请务必发回!嘿,谢谢你的回复。我得到“未从galleryModule定义initialController”。在控制器模块实例化相关控制器之前,路由器可能会使用initialController?如果术语不正确,请道歉。啊,当使用.controller表单定义控制器时,您必须根据答案在路由器中将其标识为字符串-现在一切正常!再次感谢。