УгловойJS. Можно ли добавить пользовательские свойства на фабрику $resource?

У меня есть RESTful API на основе HTTP. Когда я подключаюсь, например, к www.domain.com/chiamate/ELSENWZ, я получаю следующий результат:

{
"TICKET": "155112-I",
"TICKET_2": "ATRE6463",
"ACCOUNT_NAME": "PIPPO",
"CUSTOMER_NUMBER": "AG5",
"PROBLEM_TYPE": "H",
"VENDOR": "ITALWARE-CON",
"DESCR": "HP 6300 PRO SFF",
}

Я внедрил в AngularJS службу для использования остальных API таким образом:

var services = angular.module('ngdemo.services', ['ngResource']);

services.factory('ChiamataFactory', function ($resource) {
return $resource('/chiamate/:id', {}, {
    show: { method: 'GET',
            isArray: false, // <- not returning an array
            transformResponse: function(data, headers){
                var wrapped = angular.fromJson(data);
        alert(JSON.stringify(wrapped, null, 4));
                angular.forEach(wrapped.items, function(item, idx) {
                    wrapped.items[idx] = new Post(item); //<-- replace each item with an instance of the resource object
                });
                return wrapped;
            } },
    create: { method: 'POST' },
    update: { method: 'PUT', params: {id: '@id'} },
})
});

потому что я хочу, чтобы когда контроллер использовал службу,

$scope.chiamata = ChiamataFactory.show({id: 'ELSENWZ'});

в результате мне нужно добавить некоторые дополнительные свойства.

Проблема в том, что служба не использует transformResponse


person Janka    schedule 27.11.2014    source источник


Ответы (1)


Невозможно использовать transformResponse для украшения данных данными из асинхронной службы.

Попробуйте этот псевдокод

angular.module('myApp').service('MyService', function($q, $resource) {
  var getResult = function() {
    var fullResult = $q.defer();
    $resource('url').get().$promise.then(function(data) {
     var partialPromises = [];
      for (var i = 0; i < data.elements.length; i++) {
       var ires = $q.defer();
       partialPromisses.push(ires);
       $resource('url2').get().$promise.then(function(data2) {
        //do whatever you want with data
        ires.resolve(data2);
        });
       $q.all(partialPromisses).then(function() {
      fullResult.resolve(data);
    });
    return fullResult.promise; // or just fullResult
    }
  });
  };
  return {
    getResult: getResult
  };
});

или вы можете использовать transformResponce с $http как описано в документации

https://docs.angularjs.org/api/ng/service/$http

person madu    schedule 01.12.2014