我得到$ save()而不是Angular中的函数

时间:2014-06-16 15:12:24

标签: angularjs-resource

我正在尝试按照ProAngular一书中的教程构建一个相对简单的Web应用程序。书中的例子很好,但是当我尝试构建自己的应用程序时,我遇到了一个奇怪的错误。这是我的代码的一部分:

    $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 个答案:

答案 0 :(得分:1)

我最终得到了这个工作。不完全确定原因,但我将保存功能重命名为'更新'并将其与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;
    }

调用更新而不是保存工作。似乎有些事情干扰了使用“保存”一词。就像我说的,不确定是什么。 。 。然而。对我来说,其中一个头脑风暴。感谢那些试图提供帮助的人!

答案 1 :(得分:0)

我自己正在学习角度,但我能用你的代码看到的第一个问题是它看起来不像你正确定义资源(公平警告,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/ $资源的文档中,这些是开箱即用的:

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

就个人而言,我更喜欢自己使用$http服务。是的,它比使用$resource更加冗长,但我觉得从角度开始比$http服务更容易理解$resource。为了避免将来摆脱困境,我强烈建议您熟悉Angular中承诺的概念,因为许多服务都会使用它们。

祝你好运。