В приведенном ниже коде я пытаюсь обратиться к массиву photos
в службе appService
с контроллера pictureCtrl
, но это не сработает. Единственное, что работает, - это $scope.photoService
, ссылающийся на appService
, когда я пытаюсь вызвать модель на HTML. Когда я пытаюсь вызвать модель currentPhoto
на HTML, она ничего не покажет.Передача данных контроллеру с использованием службы
Я хотел бы получить currentPhoto
модель на HTML странице, ссылающегося на первый индекс photos
массива, который будет объектом и при нажатии на кнопку любимой на HTML он будет работать метод sendFeedback
и изменит currentphoto
. Как это можно сделать?
.controller('pictureCtrl', function ($scope, appService) {
// angular.extend($scope, appService);
$scope.photoService = appService;
$scope.photos = appService.photos;
$scope.currentPhoto = appService.photos[0];
$scope.sendFeedback = function (bool) {
if(bool) {}//add it to favorite
var randomIndex = Math.round(Math.random() * flickrData.photos.length-1);
$scope.currentPhoto = angular.copy($scope.service.flickrData.photos[randomIndex]);
};
})
.factory('appService', function ($http) {
var photoService = {};
photoService.photos = [];
photoService.feelingText = "";
photoService.getFlickrPictures = function (text) {
console.log('this has been called');
return $http({
method: "JSONP",
url: apiUrl+'&text='+text+'&format=json&jsoncallback=JSON_CALLBACK'
}).then(function (data) {
photoService.photos = data.data.photos.photo;
console.log('flickrData', photoService.photos);
}, function(err){
throw err;
});
};
return photoService;
}
Спасибо. что помогло. тем временем я создал прослушиватель событий на контроллере и широковещательное событие в службе, поэтому он будет запущен при вызове метода getFlickrPictures. теперь контроллер получает данные после того, как произойдет событие. – jhlosin