Как добавить определенный перехватчик для объекта ресурса get () или update () в AngularJS - PullRequest
0 голосов
/ 30 августа 2018

В настоящее время я использую angular-hateoas (https://github.com/jmarquis/angular-hateoas).. Я бы хотел добавить определенные перехватчики в функции query () и get () ресурса, созданного в HateoasInterface. Я искал способы сделать это , но не увенчались успехом.

Я думал, что это можно сделать, добавив это так:

var someResource = someService.resource('someresource');
someResource.query.interceptors = {
  response: function (data) {
    // do something data
    return data
  },
  responseError: function (error) {
    // do something with error
    return $q.reject(error);
  }
};

но это дает мне:

 TypeError: Attempted to assign to readonly property.

Мне может понадобиться использовать $ decorator, но у меня нет с этим опыта, и я не видел примеров для добавления определенных перехватчиков к конкретным объектам ресурса.

Я не хочу использовать $httpProvider.interceptors, так как я не хочу, чтобы перехватчик работал на всех ресурсах.

Единственное, о чем я сейчас могу думать, - это настроить HateoasInterfaceProvider с помощью функций с конкретными именами, которые содержат определенные перехватчики.

angular.module('myModule')
    .config(HateoasInterfaceConfig);

HateoasInterfaceConfig.$inject = ['HateoasInterfaceProvider'];

function HateoasInterfaceConfig(HateoasInterfaceProvider) {
    HateoasInterfaceProvider.setHttpMethods({
        get: {
            method: 'GET',
            isArray: false
        },
        getSomeResource: {
            method: 'GET',
            isArray: false,
            interceptors: {
                response: someResponseFunc,
                responseError: someErrorFunc
            }
        },
        update: {
            method: 'POST',
        },
        query: {
            method: 'GET',
            isArray: true
        }
        querySomeResource: {
            method: 'GET',
            isArray: true,
            interceptors: {
                response: function(data) { 
                    // do something with data
                    return data;
                },
                responseError: function (error) {
                    //do something with error
                    return $q.reject(error);
            }

        }
    });
    HateoasInterfaceProvider.setLinksKey('_links');
}

но я предпочитаю так не делать.

1 Ответ

0 голосов
/ 05 сентября 2018

Разобрался.

При вызове ресурса можно передавать параметры и действия.

Так как:

someServiceResult.resource('someresource',{},{get: {method: 'GET',...,
    interceptor: { response: responseInterceptorFunc, ...}}})

Все еще не является предпочтительным решением, но когда оно включено в функцию в сервисе, приемлемо.

Я хотел бы иметь решение, позволяющее изменить определение перехватчика для объекта Resource, созданного с помощью:

someServiceResult.resource('someresource')

но у меня сейчас нет времени, чтобы это выяснить.

...