ngResource save () странное поведение

0

Может кто-то пролить свет на это?

var discountResource = $resource(GLOBALS.apiPath + 'discounts/:id');
var discountResponse = discountResource.save($scope.discountForm);

В результате получается GET/скидки

Однако это приводит к POST/скидкам (ожидаемое поведение)

var discountResource = $resource(GLOBALS.apiPath + 'discounts');
var discountResponse = discountResource.save($scope.discountForm);

Я очень зациклен на этом, так как я хотел бы использовать первый вариант, с объявлением заполнителя. Но для жизни я не могу заставить его работать.

Причина, по которой я хочу вариант 1, - это то, что я могу декальрировать его на заводе и вставлять ресурс в мои контроллеры. В основном я не хочу обновлять его каждый раз, когда мне нужно взаимодействие с API. Я надеюсь, что в этом есть смысл.

Теги:
ngresource

1 ответ

1
Лучший ответ

Попробуйте что-то вроде этого

 Module.factory("Discount", ["$resource", function ($resource) { return $resource(GLOBALS.apiPath + "discounts/:Id", { Id: "@Id" }, {
            somthingCustomIfNeeded: { method: 'POST', url: GLOBALS.apiPath + "something-custom" }
        }); }]);

Обратите внимание на объект { Id: "@Id" }? Он сообщает Angular, как решить эту проблему: переменная Id

Цитата из документации

Если значение параметра имеет префикс @, то значение для этого параметра будет извлечено из соответствующего свойства объекта данных (предоставленного при вызове метода действия). Например, если объектом defaultParam является {someParam: '@someProp'}, то значением someParam будет data.someProp

Подробнее здесь https://docs.angularjs.org/api/ngResource/service/ $ resource (поиск "paramDefaults")

  • 0
    Вы, сэр, мой герой. Это прекрасно работает, но почему? У меня сложилось впечатление, что save () автоматически является POST. В этом случае нам нужно определить его как таковой вручную?

Ещё вопросы

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