У меня есть следующий скелет с угловым передним концом, считываемым из 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
}
}
);
}
Вы можете просто добавить функции на свой завод, которые обрабатывают разные маршруты/методы запроса. Но, кстати, вполне возможно, чтобы сохранить аналогичную структуру на примере, который вы предоставили, просто создайте другую фабрику, чтобы сохранить детали вашего запроса на ресурс. Пытаться
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
}
}
}
);
}
Надеюсь, это поможет.