使用ngResource定义服务或工厂以从服务器端检索数据?

时间:2014-01-22 02:28:59

标签: angularjs service factory ngresource

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

早些时候我在想定义一个有一些方法的服务:getAllUser(),getUser(id),saveUser(),deleteUser()。这些方法将使用ngResource来调用rest apis。 但是当我看到这些方法时,在我看来,我只是包装ngResource并公开他的一些低级方法:query(),get(),save(),delete()。

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

2 个答案:

答案 0 :(得分: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);
};

或者做一个get,你在方法中有这一行:

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

resource.$remove(successCallback, errorCallback);

希望有所帮助。

答案 1 :(得分: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”,接收所有用户(加上它接收一些资源功能,如save,因为“users”变量仍然是资源对象),就像你发出这个请求(... / user /),好?你所要做的就是调用资源,这非常简单。