Я получаю $save(), а не функцию в Angular

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

    $scope.dispositionsResource = $resource(dispositionUrl + ":id", { id: "@id" },
        { create: {method: "POST"}, save: {method: "PUT"}, delete: {method: "DELETE"}
    });

,,,

    $scope.updateDisposition = function (disposition) {
       alert("DISPOSITION: "+disposition.name);
        disposition.$save();
    }

Функции создания и удаления работают нормально. Метод updateDisposition вызывается из формы HTML, и передается правильное значение расположения (на основе Alert). Но ошибка, которую я получаю:

    "Error: disposition.$save is not a function"

Ни один из моих примеров кода отдельно не определяет функцию сохранения, функция должна быть частью службы restful ($resource). Не должно ли это?

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

Тед

2 ответа

Решение

Я закончил тем, что получил эту работу. Не совсем уверен, почему, но я переименовал функцию Сохранить в "Обновление" и связал ее с функциональностью PUT.

$scope.dispositionsResource = $resource(dispositionUrl+":id", { id: "@id" },
       { 'create': {method: "POST"}, 'update': {method: "PUT"}
       });

 $scope.updateDisposition = function (disposition) {
        $scope.dispositionsResource.update(disposition);
        $scope.editedDisposition = null;
    }

вызов обновления, а не сохранение работали. Казалось, что-то мешает использовать термин "сохранить". Как я уже сказал, не уверен, что.,, еще. Один из тех головокружителей для меня. Спасибо тем, кто пытался помочь!

Я сам изучаю angular, но первая проблема, которую я вижу в вашем коде, заключается в том, что не похоже, что вы правильно определяете $ resource (справедливое предупреждение, у Angular есть куча предостережений, и вы, возможно, просто углубляетесь в одно из них. не в курсе).

Я считаю, что более простой способ сделать то, что вы пытаетесь сделать, - это сначала создать угловую фабрику для $ ресурса, вот так:

           angular.module('yourModuleName')
             .factory('disposition', function($resource) {
                return $resource('/whatever/url/youwant/:id', {
                  id: '@id'
                       })
                     });

И затем оттуда, объявите фабрику как зависимость для вашего контроллера:

         angular.module('yourModuleName')
           .controller('yourControllerName', function($scope, disposition) {
             $scope.submitForm = function($scope)
               disposition.save($scope.nameOfYourModel);
           });

Следует иметь в виду, что в $ resource есть все методы, которые вы объявили по умолчанию. Из документации по адресу https://docs.angularjs.org/api/ngResource/service/$ resource вы можете получить следующее:

            { 'get':    {method:'GET'},
               'save':   {method:'POST'},
               'query':  {method:'GET', isArray:true},
               'remove': {method:'DELETE'},
               'delete': {method:'DELETE'} };

Лично я предпочитаю использовать $http обслуживай себя. Да, это немного более многословно, чем использование $resource но я чувствую, что это намного легче понять $http когда начинается с угловой, чем $resource оказание услуг. Чтобы в будущем избавиться от головных болей, я настоятельно рекомендую ознакомиться с концепцией обещаний в Angular, поскольку многие из ее сервисов используют их.

Удачи.

Другие вопросы по тегам