AngularJS:在控制器之间共享数据,具有服务和 restangular

AngularJS : Share data between controllers with service and restangular

本文关键字:服务 restangular 数据 控制器 之间 共享 AngularJS      更新时间:2023-09-26

我是 angular 的新手,我仍在为服务而苦苦挣扎,我有一个应用程序可以查询服务器进行调查,并在向导中显示调查问题,调查中的每个问题都在一个路由中(/survey/:surveyId/question/:questionId)

我正在尝试做的是第一次加载调查,然后使用该加载的数据而不再次查询它。

据我了解,我需要一项服务,我正在使用 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() 中的函数,我不知道如何获取问题,我不知道它们是否已经解决。

我不知道我是否足够清楚,但我需要一些建议。

尝试这样的事情:

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 的新手,但我认为这可能有效,它也没有经过测试。