在Angular JS中添加带有$ recource的新项

时间:2015-06-19 13:38:57

标签: angularjs

我创建了一个简单的应用程序来将事件存储到我的数据库中。它工作正常,但有一个词汇。

我使用以下方法:

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' );
}]);

更新:基本示例

使用此示例,一切都在前端工作,但在我的rest API中,数据不会传递。

<!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>

对于后端,我创建了一个非常基本的脚本,将请求写入文件: 它总是说&#34; array()&#34;所以没有数据传递。

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

1 个答案:

答案 0 :(得分:0)

你在哪里初始化$scope.event或者它是由角度自动创建的?如果这是一个普通的JavaScript对象,则无法调用.$save,但您可以使用事件服务本身 - 无需创建新实例:

Event.create($scope.event)