【问题标题】:Define Service or factory using ngResource to retrieve data from server side?使用 ngResource 定义服务或工厂以从服务器端检索数据?
【发布时间】:2014-02-11 22:16:28
【问题描述】:

我正在开发 Angular Web 应用程序。而且我有这个控制器需要调用restful api对用户进行一些操作。

之前我正在考虑定义一个具有一些方法的服务:getAllUser()、getUser(id)、saveUser()、deleteUser()。这些方法将使用 ngResource 来调用 rest api。 但是当我查看这些方法时,在我看来,我只是在包装 ngResource 并公开他的一些较低级别的方法:query()、get()、save()、delete()。

有人可以分享一些关于您将如何设计使用 ngResource 从服务器获取数据的通用服务或工厂或提供程序的经验吗?

【问题讨论】:

    标签: angularjs service factory ngresource


    【解决方案1】:

    我自己一直在做一个 Angular 项目。我手动构建了一个工厂,然后最终使用 JBoss Forge 进行了第二次尝试,它以一种非常好的方式为我构建了东西,这就是它的样子:

    angular.module('myApp').factory('myResource', function($resource){
    
        var urlBase = '/rest/resources';
    
        var resource = $resource(urlBase + '/:RsvpId',{RsvpId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}});
    
        return resource;
    });
    

    这就是它的全部内容,然后当你想调用它时,你可以执行以下操作:

    $scope.save = function() {
        var successCallback = function(data,responseHeaders){
            var id = locationParser(responseHeaders);
            $location.path('/Resources/edit/' + id);
            $scope.status = 'success';
        };
        var errorCallback = function(data, status, headers, config) {
            $scope.status = 'failure';
            $scope.statusMessage = 'Saving your resource failed: ' + $scope.errorMessage;
        };
        myResource.save($scope.resource, successCallback, errorCallback);
    };
    

    或者做一个get,你会在一个方法中加入这一行:

    myResource.get({ResourceId:$routeParams.ResourceId}, successCallback, errorCallback);
    

    resource.$remove(successCallback, errorCallback);
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      让我解释一下 ngResource...

      ngResource 是来自 AngularJs 的服务,它在较低级别使用 $http 服务,因此当您想要使用 RESTFul 资源时使用它非常简单。这是我的例子:

      myAppModule.factory('User', ['$resource', function($resource) { 
              return $resource('/user/:userId'}
      ]);
      

      那么上面的这段代码在做什么呢?这是创建一个返回资源的服务,该 url 已映射,因此当您注入并调用此服务时,您会收到一个带有一些方法的对象:“GET”、“POST”、“PUT”、“DELETE”... 示例:

      var users = User.query();
      

      变量“users”,接收所有用户(加上它接收一些资源特性,比如保存,因为“users”变量仍然是一个资源对象),就像你发出这个请求(.../user/),好的?您所要做的就是调用资源,这非常简单。

      【讨论】:

        猜你喜欢
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 2022-07-07
        • 2019-04-03
        相关资源
        最近更新 更多