Я получаю $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, поскольку многие из ее сервисов используют их.
Удачи.