Как передать URL в $ resource, который присутствует в angular js factory - PullRequest
2 голосов
/ 29 марта 2019

Ранее я передавал URL-адреса некоторыми службами в угловой JS. Теперь я хочу передать URL в $ resource от контроллера в качестве параметра.

Я пытался передать URL-адрес ресурсу из контроллера, но выдает ошибку, что объект URL не найден.

Ниже приведен мой текущий заводской код:

angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',

    function(Resource, Service, Http) {

        return {
            testGetPatients : Resource(Service.getPatientsCustomRefURL(), {}, {
                query : {
                    method : 'GET',
                    isArray : false
                }
            })
        };                                                                                                                                                                                                                                                                                                                                                                                                      
}]);

В приведенном выше коде я отправляю параметр url из Service.getPatientCUstomRefURL

Фактический вызов $ resource показан ниже:

PatientsService.getPatientsRef.query(function(refResponse) { 
//TODO for response
});

Теперь я хочу передать параметр примерно так:

PatientsService.getPatientsRef.query("/patient/list",function(refResponse) {
//TODO for response
 });

Какие изменения я должен внести в свою фабрику PatientsService, чтобы она поддерживала передачу URL в качестве параметра.

Вот код, который создаст URL для $ resource Код услуги

angular.module('Services', ['ngResource']).factory('Service', ['$resource', '$location', '$rootScope',
                                                               function($resource, $location, $rootScope) {
    return {
        getPatientsCustomRefURL: function() {
            return '/patient/list';
        }
    };
}
]);

Примечание

У меня так много методов в PatientService, поэтому я не хочу добавлять дополнительную функцию в PatientService для каждого $ ресурса, которая будет передавать URL как параметр, подобный

angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',
        function(Resource, Service, Http) {

            return {
                testGetPatients : function(url){
                 return Resource(url, {}, {
                    query : {
                        method : 'GET',
                        isArray : false
                    }
                })
            }
            };                                                                                                                                                                                                                                                                                                                                                                                                      
       }]);

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

для описанного выше проблемного сценария вы можете обернуть существующий $ ресурс в некоторую функцию и передать URL-адрес этой функции.

angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',
        function(Resource, Service, Http) {

            return {
                testGetPatients : function(url){
                 return Resource(url, {}, {
                    query : {
                        method : 'GET',
                        isArray : false
                    }
                })
            }
            };                                                                                                                                                                                                                                                                                                                                                                                                      
       }]);

, что имеет смысл.

0 голосов
/ 29 марта 2019

Теперь я хочу передать параметр примерно так:

PatientsService.getPatientsRef.query("/patient/list",function(refResponse) {
//TODO for response
 });

Для такого вызова API было бы проще использовать сервис $http:

$http.get("/patient/list").then(function(response) {
    var refResponse = response.data;
    //TODO for response
});

Стандартный способ изменения URL-адреса с помощью службы $ resource заключается в определении параметров в шаблоне URL:

var service = $resource("/api/:slug/list", {slug: patient}, {
    getByID: {
        url: "/api/:slug/:id",
        method: "GET",
        isArray: false,
   }
);

Примеры:

$scope.patients = service.query(); //returns array from
//  api/patient/list 

$scope.doctors = service.query({slug: doctor}); //returns array from
//  api/doctor/list

$scope.patientRecord = service.getById({id: 1234}); //returns object from
//  api/patient/1234

$scope.patientRecord = service.get({id:1234}); //returns object from
//  api/patient/list?id=1234

Параметризованный шаблон URL использует параметры с префиксом :, как в /user/:username.Если вы используете URL с номером порта (например, http://example.com:8080/api), он будет соблюдаться.

Каждое значение ключа в объекте параметра сначала связывается с шаблоном URL, если он присутствует, а затем добавляются все лишние ключи.к поисковому URL-адресу после ?.

Важно понимать, что вызов метода $ resource object немедленно возвращает пустую ссылку (объект или массив в зависимости от isArray).Как только данные возвращаются с сервера, существующая ссылка заполняется фактическими данными.Это полезный прием, так как обычно ресурс назначается модели, которая затем визуализируется представлением.

Для получения дополнительной информации см. Справочник по API ресурса AngularJS $ - Аргументы

...