1

我正在开发有角度的网络应用程序。我有这个控制器需要调用restful api来对用户进行一些操作。

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

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

4

2 回答 2

3

我自己一直在做一个有角度的项目。而且我手动构建了一个工厂,然后最终使用 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);
};

或者做一个获取,你会在一个方法中有这一行:

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

或者

resource.$remove(successCallback, errorCallback);

希望有帮助。

于 2014-01-22T03:10:38.710 回答
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/),好吗?您所要做的就是调用资源,这非常简单。

于 2014-01-22T04:42:42.403 回答