2

我是 Angular 的新手,所以这可能是一个简单的问题。我现在有这个工厂资源:

angular.module('resources.survey', ['ngResource'])
    .factory('Survey', function ($resource) {
        return $resource('/backend/surveys/:surveyId/data', {surveyId: '@id'});
    });

控制器:

.controller('PagesCtrl', function (Survey) {
        var survey = Survey.get({surveyId: 2});
        //now I want to change survey variable and share it between two controllers
 });

ngResource 没有问题,我可以从服务器获取数据。但是,我想使用来自服务器的数据进行操作,并在其他控制器中使用相同的数据(可能使用 DI)并允许在那里进行数据操作。我知道它可以用 $rootScope 来完成,但我想知道是否还有其他方法。

4

4 回答 4

1

您的服务应将资源请求的响应缓存在调查数组之类的内容中,并从该数组中分发调查,而不是直接返回资源对象。

仅当返回调查的相同参考时,控制器才会共享数据。

大致看起来像

.factory('Survey', function ($resource,$q) {
        var surveys[];
        return {
            getSurvey:function(id) {
                var defer=$q.defer();
                //if survery contains the survey with id do //defer.resolve(survey[i]);
                // else query using resource. On getting the survey add it to surveys result and resolve to the newly added survey.
            }
        }
    });
于 2014-01-24T11:03:32.360 回答
0
angular.module('resources.survey', ['ngResource'])
    .factory('Survey', function ($resource) {
        return $resource('/backend/surveys/:surveyId/data', {surveyId: '@id'});
    })
    .controller('MyCtrl', function($scope,Survey){
        //here you can call all the $resource stuff        
    });
于 2014-01-24T10:15:19.530 回答
0

这是完整的文档和示例如何使用它: http ://docs.angularjs.org/api/ngResource.$resource

于 2014-01-24T10:15:24.890 回答
0

我设法创建了一个可以处理我想要的资源。它可能没有钱德马尼建议的那么先进。但它适用于我的需求。

angular.module('resources.survey', ['ngResource'])
    .factory('Survey', function ($resource) {

        var resource = $resource('/backend/surveys/:surveyId/data',
            {surveyId: '@id'}
        );
        var Survey = {};
        var data = []; //saves the data from server 
        Survey.get = function(surveyId) {

            if(angular.isDefined(data[surveyId])){
                return data[surveyId];
            }

            return data[surveyId] = resource.get({surveyId: surveyId});
        };

        return Survey;
    });

基本上我这样称呼它:

.controller('QuestionsCtrl', function (Survey) {
    Survey.get(1).newData = 'newData'; //adding additional data
    console.log(Survey.get(1));
}); 

我想这可以改进。

于 2014-01-24T12:56:11.983 回答