Angularjs 在Angular JS中添加带有$resource的新项目

Angularjs 在Angular JS中添加带有$resource的新项目,angularjs,Angularjs,我创建了一个简单的应用程序来将事件存储到我的数据库中。它工作得很好,但有一句话要说 我使用以下方法: controllers.controller('CalendarAddController', function($scope, $routeParams, Event) { $scope.addEvent = function() { $scope.ev=new Event(); $scope.ev.title = $scope.event.title

我创建了一个简单的应用程序来将事件存储到我的数据库中。它工作得很好,但有一句话要说

我使用以下方法:

controllers.controller('CalendarAddController', function($scope, $routeParams, Event) { 
    $scope.addEvent = function() {
        $scope.ev=new Event();
        $scope.ev.title = $scope.event.title;
        $scope.ev.$save().then(function(res)  { console.log("success");})
        .catch(function(req) { console.log("error saving obj"); })
        .finally(function()  { console.log("always called") });
    }
});
提交表单后,将调用addEvent函数。 如果我打印$scope.event的值,则它具有正确的值。 但是,当我调用.save()时,我得到错误“TypeError:$scope.event.$save不是一个函数。”

但是,当我创建一个新对象并为其指定值时,它工作得很好

为什么它不能直接工作?我认为总是创建一个虚拟对象似乎不是最佳实践

我创建的服务

services.factory( 'Resource', [ '$resource', function( $resource ) {
    return function( url, params, methods ) {
      var defaults = {
        update: { method: 'put', isArray: false },
        create: { method: 'post' }
      };

     methods = angular.extend( defaults, methods );

     var resource = $resource( url, params, methods );

     resource.prototype.$save = function() {
       if ( !this.id ) {
         return this.$create();
       }
       else {
         return this.$update();
       }
     };

     return resource;
   };
 }]);

services.factory( 'Event', [ 'Resource', function( $resource ) {
   return $resource( '/api/calendar/:id' );
}]);
更新:基本示例

使用这个例子,所有东西都在前端工作,但在我的RESTAPI中,数据没有传递

<!DOCTYPE html>
<html lang="en-US">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-resource.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js"></script>
<script type="text/javascript">
var app = angular.module('app', ['ngRoute','ngResource'])
.config(function($routeProvider) {
        $routeProvider
            .when('/', {
                templateUrl : 'pages/home.html',
                controller  : 'mainController'
            })
    });

app.factory('Event', function($resource) {
  return $resource('/test/api/:id');
});
app.controller('mainController', ['$scope', '$routeParams', 'Event',
    function($scope, $routeParams, Event) {
        function handleSuccess(data) {
            alert("success");           
        }
        function handleError(data) {
            alert("error");         
        }     
        var event = new Event();
        event.title = "a title";
        Event.save(event, handleSuccess, handleError);
}]);
</script>
<body>
    <div ng-app="app">
      <div ng-view></div>
    </div>
</body>
</html>

var app=angular.module('app',['ngRoute','ngResource']))
.config(函数($routeProvider){
$routeProvider
。当(“/”{
templateUrl:'pages/home.html',
控制器:“主控制器”
})
});
应用程序工厂('Event',函数($resource){
返回$resource('/test/api/:id');
});
app.controller('mainController',['$scope','$routeParams','Event',
功能($scope、$routeParams、Event){
函数handleSuccess(数据){
警惕(“成功”);
}
函数句柄错误(数据){
警报(“错误”);
}     
var event=新事件();
event.title=“一个标题”;
Event.save(Event,handleSuccess,handleError);
}]);
对于后端,我创建了一个非常基本的脚本,用于将请求写入文件: 它总是显示“array()”,因此不会传递任何数据

<?php
    $myFile = "testFile.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    $stringData = print_r($_REQUEST,true);
    fwrite($fh, $stringData);
    fclose($fh);
?>

在哪里初始化
$scope.event
,还是由angular自动创建?如果这是一个普通JavaScript对象,您不能调用
$save
,但可以使用事件服务本身-无需创建新实例:

Event.create($scope.event)

你能把你的事件服务放在这里吗?好的,我明白了,但是,我得到了一个错误:TypeError:Event.save(…)。然后不是一个函数使用你自己的资源服务覆盖了一些东西。检查
Event
上的可用方法-可能必须使用
Event.create($scope.Event)似乎Event.save()确实起作用,但“.then”不起作用,可能是因为没有返回承诺。是否有最佳实践来检查Event.create(事件)或Event.save(事件)的成功或错误结果?我对您的代码做了一些修改。当然,我从服务器返回了一个错误,因为那里不支持POST请求,但是您可以看到
save
create
两种方法都工作正常。问题一定在别的地方。你得到了什么错误?谢谢,我已经做了一个非常基本的脚本,我已经在我原来的帖子中添加了这个脚本。它现在似乎正在工作,没有收到任何错误,但我的数据没有发布到api。后端我总是收到一个空数组。