AngularJS: обмен данными между контроллерами с сервисом и рестангуляром.

Я новичок в angular, и я все еще борюсь со службами, у меня есть приложение, которое запрашивает у сервера опрос и показывает вопросы опроса в мастере, каждый вопрос в опросе находится в маршруте (/ опрос /: идентификатор опроса/вопрос/:идентификатор вопроса)

Что я пытаюсь сделать, так это загрузить опрос в первый раз, а затем использовать эти загруженные данные, не запрашивая их снова.

Как я понял мне нужен сервис, я использую Restangular и не знаю что вернуть в свой сервис, вот что у меня есть:

angular.module('surveys')
    .factory('questionsService', ['Restangular', function (Restangular) {
        var surveyId = 1;

        return {
            questions: Restangular.one("survey", surveyId).getList("questions")
        }
}

а затем в моем контроллере я просто делаю:

questionsService.questions.then(function (questions) {
            $scope.questions = questions;
            $scope.currentQuestion = $routeParams.page ? $scope.questions[$scope.currentQuestionIndex] : null;
        });

И это работает, я не знаю, правильный ли это способ сделать это.

Но теперь мне нужны другие вещи в моем сервисе, например, получение вопросов без ответов, и именно здесь я теряюсь, потому что, если я добавлю функцию в getUnansweredQuestions() в своем сервисе, я не знаю, как получить вопросы, Я не знаю, решены ли они уже.

Не знаю, достаточно ли я ясно выразился, но мне нужен совет.


person Escobar5    schedule 21.10.2013    source источник


Ответы (1)


Попробуйте что-то вроде этого:

surveys.run(function($rootScope,$http,$q) {
    function getData () {
        var deferred = $q.defer();
        $http(insertConfigObjectHere)
        .success(function (data, status, headers, config) {
            deferred.resolve(data);
        })
        .error (function (data, status, headers, config) {
            deferred.reject();
        });
        return deferred.promise;
    }
    $rootScope.myData = getData();
}

ВНИМАНИЕ: я тоже новичок в AngularJS, но я думаю, что это может сработать, это тоже не проверено.

person Florian Wendelborn    schedule 21.10.2013