我最近一直在尝试使用 Angular.js。作为其中的一部分,我创建了一组非常简单的控制器,其中包含 ng-view 和模板,以根据请求的路由触发。我使用 angularFireCollection 只是为了从 Firebase 中获取一个数组。这在不构成 ng-view 的 thumbnailController 中工作正常。
我的问题是除了流入thumbnailController的数据外,我还需要另外两个控制器才能访问数据。我最初只是将数据设置为 $rootScope 的一部分,或者将 ng-view 作为设置 thumbnailController 的 div 的子级。
但是,从这个角度来看,问题是每个子控制器可能会尝试在模板中设置数据,然后才能从 Firebase 实际获得数据。
根据这个问题angularFire route resolution的答案,该解决方案似乎正在使用 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;
}