Как заставить AngularJS использовать $ resource для возврата мульт

0

У меня есть следующий скелет с угловым передним концом, считываемым из API рутинного рубина (написанного на падрино).

'use strict';

(function(angular) {
  function ApiAction($resource) {
    return $resource('/api/',
      { },
      { api_index: {
        method: "GET",
        isArray: true 
        }
      }
                    );
  }

  function whaleCtr($scope, ApiAction) {
    $scope.whaleSubmit = function() {
     // ApiAction.create({}, { whale_name: $scope.whaleName, age: $scope.whaleAge });
      angular.forEach($scope.whales, function(d) {
        ApiAction.create({}, { whale_name: d.whale_name, age: d.age }); 
      });
    };
    var dolphins = ApiAction.api_index({}, {});
    $scope.whales = [];
    dolphins.$promise.then(function(data) {
      angular.forEach(data, function(item) {
        $scope.whales.push(item);
      });
    }, function(data) {
      //if error then...
    });

    $scope.appendwhaleFields = function() {
      var i = $scope.whales.length + 1;
      $scope.whales.push({"id": i, age: "", whale_name: "" })
    }

  }

  var whaleApp = angular.module('whaleApp', ['ngResource']);
  whaleApp.controller('whaleCtr', ['$scope', 'ApiAction', whaleCtr]);
  whaleApp.factory('ApiAction', ['$resource', ApiAction]);
})(angular);

Я хочу, чтобы фабрика ApiAction делала базовое создание одного объекта/обновляла один объект/уничтожала один объект в дополнение к тому, чтобы читать все объекты из api с помощью маршрута '/api/'. Возможно ли создать решение с нижерасположенной структурой? (очевидно, вы можете иметь несколько возвратов, насколько я знаю, но я хочу поместить все CRUD-действия в функцию ApiAction).

фиктивный код для предлагаемого решения (очевидно, вы можете иметь несколько возвратов)

function ApiAction($resource) {
        return $resource('/api/',
          { },
          { api_index: {
            method: "GET",
            isArray: true 
            }
          }

          return $resource('/api/create',
          { },
          { create: {
            method: "POST",
            isArray: true 
            }
          }

                        );
      }
Теги:

1 ответ

1

Вы можете просто добавить функции на свой завод, которые обрабатывают разные маршруты/методы запроса. Но, кстати, вполне возможно, чтобы сохранить аналогичную структуру на примере, который вы предоставили, просто создайте другую фабрику, чтобы сохранить детали вашего запроса на ресурс. Пытаться

whaleApp.factory('ResourceParams', function(){ // We make a new factory call ResourceParams
  var factory= {};
  factory.method ='';
  factory.route = '';
//Add some methods to set it properties
  factory.SetMethod = function(method){
   factory.method = method;
  }
  factory.SetRoute = function(route){
    factory.method = route;
  }
});

Затем добавьте завод ResourceParams в свою фабрику ApiAction

 whaleApp.factory('ApiAction', ['$resource',ResourceParams, ApiAction]);

И, наконец, мы используем фабрику ResourceParams для настройки того, как мы хотим взаимодействовать с сервисом

function ApiAction($resource,ResourceParams) {
        return $resource(ResourceParams.route,
          { },
          { api_index: {
            method: ResourceParams.method,
            isArray: true 
            }
          }

          return $resource(ResourceParams.route,
          { },
          { create: {
            method: ResourceParams.method,
            isArray: true 
            }
          }
      }

                        );
      }

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

  • 0
    Спасибо, я думаю, что в вашей ApiAction отсутствует скобка?
  • 0
    Я добавил дополнительную скобку, которая должна работать
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню