2015-11-10 3 views
0

В приведенном ниже коде я пытаюсь обратиться к массиву 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; 
} 

ответ

0

Кажется, что массив фотографий никогда не был заселен. Поскольку вы используете завод, то, что будет введено в ваш контроллер, станет новым экземпляром photoService.

Вы увидите фотографии только в том случае, если вы впервые вызвали свою функцию для извлечения данных из службы $ http.

Я бы создал функцию loadPhotos на вашем сервисе, которая вернет данные в качестве обещания вашему контроллеру.

+0

Спасибо. что помогло. тем временем я создал прослушиватель событий на контроллере и широковещательное событие в службе, поэтому он будет запущен при вызове метода getFlickrPictures. теперь контроллер получает данные после того, как произойдет событие. – jhlosin

Смежные вопросы