【问题标题】:Object #<Resource> has no method 'save'对象 #<Resource> 没有方法“保存”
【发布时间】:2013-08-15 10:31:05
【问题描述】:

我有一个使用 Spring MVC Rest API 的相当简单的 AngularJS 应用程序。

我可以查询 API。但是我在创建对象时遇到了麻烦。我收到以下错误,但无法弄清楚原因。我看过类似的问题,但我的 API 正在返回创建的对象,据我所知,我的注入是正确的。

这是来自 javascript 控制台的堆栈:

TypeError: Object #<Resource> has no method 'save'
at Object.TeamListCtrl.$scope.addPlayer(http://localhost:8000/app/js/controllers.js:17:13)
at elementFns (http://localhost:8000/app/lib/angular/angular.js:6365:19)
at Object.$get.Scope.$eval (http://localhost:8000/app/lib/angular/angular.js:8057:28)
at Object.$get.Scope.$apply (http://localhost:8000/app/lib/angular/angular.js:8137:23)
at Object.ng.config.$provide.decorator.$delegate.__proto__.$apply (http://localhost:8000/app/index.html:855:30)
at HTMLFormElement.ngIncludeDirective.restrict (http://localhost:8000/app/lib/angular/angular.js:13159:11)
at event.preventDefault (http://localhost:8000/app/lib/angular/angular.js:1992:10)
at Array.forEach (native)
at forEach (http://localhost:8000/app/lib/angular/angular.js:130:11)
at HTMLFormElement.eventHandler (http://localhost:8000/app/lib/angular/angular.js:1991:5) 

这是我的控制器:

function TeamListCtrl($scope, Shared, Teams, Players) {
$scope.teams = Teams.query();

$scope.addPlayer = function() {

    var newPlayer = new Players({
        position: $scope.newPlayer.position,
        lastName: $scope.newPlayer.lastName,
        firstName: $scope.newPlayer.firstName
    });

    newPlayer.save({teamId: $scope.newPlayer.teamId});
};
}

TeamListCtrl.$inject = ['$scope', 'Shared', 'Teams', 'Players'];

这是我的服务:

var teamsService = angular.module('teamsService', ['ngResource']);

teamsService.factory('Players', function($resource){
    return $resource('http://localhost\\:8080/api/teams/players/:teamId', {teamId:'@teamId'}, {
        save: {method:'POST'}
    });
});

感谢您提供的任何帮助。

【问题讨论】:

    标签: angularjs angularjs-resource


    【解决方案1】:

    你可以尝试发布资源吗,像这样

    var newPlayer = {
            teamId: $scope.newPlayer.teamId,
            position: $scope.newPlayer.position,
            lastName: $scope.newPlayer.lastName,
            firstName: $scope.newPlayer.firstName
        };
    
    Players.save(newPlayer);
    

    【讨论】:

    • 那行得通。我不得不更改 api 以在 player 对象中包含 teamId 并更新链接,但它有效。谢谢您的帮助。请问你是在哪里找到这些信息的?从 angularJs 文档中,它总是显示创建一个实例,然后从实例调用 save 而不是您推荐的静态调用。
    • 是的 AngularJS 文档显示了您所展示的示例。它也应该对你有用。您可以尝试调用 $save 方法,该方法在您使用资源时返回的每个实体上都可用。你是如何做新的Players,我认为这不是正确的方法。如果您看到他们执行的所有示例,然后更新返回的实体。文档并没有说得很清楚,但是返回参数说明给出了资源上可用的方法以及资源返回的实体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多