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。后端我总是收到一个空数组。