基本上我有点不确定应该如何创建/管理我的资源。我正在考虑资源作为(MVC)背景中的模型。例如,这是我的工厂:
angular.module('resources.question', ['ngResource'])
.factory('Question', function ($resource) {
return $resource('/:questionId', {questionId: '@id'}, {
postTest: {method: 'POST', url: '/create/:pageId/:questionId', params: {questionId: 0}},
search: {method: 'GET', url: '/search/:query', params: {query: ''}, isArray: true},
edit: {method: 'GET', url: '/edit/:pageQuestionId'},
delete: {method: 'GET', url: '/delete/:pageQuestionId'},
addExisting: {method: 'GET', url: '/addtopage/:pageId/:questionId'}
});
});
我注意到我有一些重复的任务,比如插入数据。例如:
var newQuestion = Question.addExisting({
pageId: data.pageId,
questionId: data.questionId,
id: $scope.data.search.question.id
});
//update object from database
$rootScope.survey.pages[data.pageIndex].questions.splice(data.questionIndex, 0, newQuestion); //insert the data
所以基本上我不知道如何处理类似的情况。我的工厂是否需要以某种方式扩展以处理这种数据操作,或者我是否需要为这些任务创建另一个工厂。或者只是我过度思考这个?
答案 0 :(得分:1)
为什么不将所有重复的代码抽象到另一个服务中并将其注入您的控制器或您使用当前资源的任何地方?
设置类似于问题管理服务的内容,您可以在其中注入当前的问题服务并创建一个API,您可以在更高级别处理问题域。将对资源做出响应后所做的所有事情都放回到各种方法中。
请记住,因为所有这些都是异步的,您需要通过$ q服务或回调函数实现promise。
答案 1 :(得分:0)
这不是您问题的直接答案,但要小心您的自定义$资源操作名称。使用delete
可以cause problems if you try to minify your code,因为它是Javascript中的reserved word。使用reserved words作为属性名称通常被认为是不好的做法。
来自这里的见解: