Определить службу или фабрику с помощью ngResource для извлечения данных со стороны сервера?

Я разрабатываю угловое веб-приложение. И у меня есть этот контроллер, который должен вызывать restful API для выполнения некоторых операций с пользователями.

Раньше я думал определить службу, которая имеет несколько методов: getAllUser(), getUser(id), saveUser(), deleteUser(). эти методы будут использовать ngResource для вызова остальных API. Но когда я смотрю на эти методы, мне кажется, что я просто оборачиваю ngResource и открываю некоторые из его методов более низкого уровня: query(), get(), save(), delete().

Может ли кто-нибудь поделиться опытом о том, как вы будете разрабатывать общие сервисы, фабрики или провайдеры, которые используют ngResource для извлечения данных с сервера?


person Aaron Shen    schedule 22.01.2014    source источник


Ответы (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/), хорошо? Все, что вам нужно сделать, это вызвать ресурс, это очень просто.

person Rodrigo Fonseca    schedule 22.01.2014

Я сам работал над угловым проектом. И я построил Фабрику вручную, а затем использовал 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);

or

resource.$remove(successCallback, errorCallback);

Надеюсь, это поможет.

person Nabeel Saad    schedule 22.01.2014