我创建了一个简单的应用程序来将事件存储到我的数据库中。它工作正常,但有一个词汇。
我使用以下方法:
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);
?>
答案 0 :(得分:0)
你在哪里初始化$scope.event
或者它是由角度自动创建的?如果这是一个普通的JavaScript对象,则无法调用.$save
,但您可以使用事件服务本身 - 无需创建新实例:
Event.create($scope.event)