【问题标题】:Angular services/resources handlingAngular 服务/资源处理
【发布时间】:2014-02-19 22:49:35
【问题描述】:

基本上我有点不确定我应该如何创建/管理我的资源。我正在考虑将资源作为(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

所以基本上我不确定如何处理类似的情况。我的工厂是否需要以某种方式扩展以处理此类数据操作,或者我是否需要为此类任务创建另一个工厂。还是只是我想多了?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    这不是您问题的直接答案,但请注意您的自定义 $resource 操作名称。使用delete 可以使用cause problems if you try to minify your code,因为它是Javascript 中的reserved word。使用reserved words 作为属性名称通常被认为是不好的做法。

    从这里获得洞察:

    【讨论】:

      【解决方案2】:

      您为什么不将所有重复的代码抽象到另一个服务中,然后将其注入您的控制器或您正在使用当前资源的任何地方?

      设置类似 questionManagement 服务,您可以在其中注入当前问题服务并创建 API,您可以在更高级别上处理问题域。将响应资源返回后所做的所有事情放在这些不同的方法中。

      请记住,因为所有这些都是异步的,您需要通过 $q 服务或回调函数来实现承诺。

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2020-01-31
        • 1970-01-01
        • 2023-04-02
        • 2012-11-30
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 2020-01-08
        相关资源
        最近更新 更多