Я немного экспериментировал с Angular.js. В рамках этого я создал очень простой набор контроллеров с ng-view и шаблонами для запуска в зависимости от запрошенного маршрута. Я использую angularFireCollection, чтобы захватить массив из Firebase. Это отлично работает в thumbnailController, который не является частью ng-view.Инъекция angularFireCollection в конфигурацию angular.js для использования по разрешению
Моя проблема заключается в том, что помимо данных, передаваемых в thumbnailController, мне также нужны два других контроллера для доступа к данным. Сначала я просто установил, что данные либо являются частью $ rootScope, либо имеют ng-view в качестве дочернего элемента div, в котором установлен параметр thumbnailController.
Однако проблема с этой точки зрения заключается в том, что каждый подконтроллер, по-видимому, пытается установить данные в шаблоне, прежде чем он будет фактически доступен из Firebase.
Решение похоже на использование решения в соответствии с ответом на этот вопрос angularFire route resolution. Однако, используя приведенный ниже код (а также ссылаясь на angularFireCollection), я получаю сообщение об ошибке, которое angularFire является неизвестным провайдером. Мое понимание кода ниже должно быть достаточным, и я бы также добавил, что использование angularFireCollection в thumbnailController прекрасно работает, как я говорю.
Я также экспериментировал с инжектированием углового Fire/aFCollection непосредственно в контроллеры, используя. $ Inject, однако подобная проблема возникла с точки зрения того, что она считается неизвестным провайдером.
Если возможно, кто-нибудь может посоветовать, в чем проблема может быть здесь?
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;
}
Я думаю, что это должно быть обходным путем, однако мое понимание (которое, вероятно, неверно) заключается в том, что контроллеры могут быть распознаны только в механизме routeProvider, если они определены как отдельные функции. Использование вышеописанного метода приводит к сообщению об ошибке для меня (но это, скорее всего, связано с моей дилетантской честностью, поэтому я принял ваш ответ и очень признателен за это). Будет следить за успехом и благодарностью АФ за отличный продукт. – Michael
Какая ошибка вы получаете? Вышеприведенный код обычно должен работать (если не совсем, я его фактически не запускал). Обязательно отправьте сообщение, если вы не можете найти причину! – Anant
Эй, спасибо за ответ. Я получаю 'initialController' не определен из galleryModule '. Возможно, маршрутизатор использует начальный контроллер, прежде чем модуль контроллера создаст экземпляр данного контроллера? Извините, если терминология неверна. – Michael