我是棱角分明的新手,所以这可能是一个简单的问题。我现在有这个工厂资源:
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完成,但我想知道是否还有其他办法。
答案 0 :(得分: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.
}
}
});
答案 1 :(得分: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
});
答案 2 :(得分:0)
以下是完整的文档和示例如何使用它: http://docs.angularjs.org/api/ngResource.$resource
答案 3 :(得分:0)
我设法创建了一个可以处理我想要的资源。它可能不像Chandermani建议的那样先进。但它适合我的需要。
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));
});
我想这可以改进。