使用AngularJS和$ resource保存新模型

我试图用$ resource来理解AngularJS,然而我在这里看到的大多数例子都没有解释如何使用$ resource实际创build新的实例(或者整个设置看起来如何)。 我已经发布我的代码在这个底部。

我有以下设置,发布到'/ entry / api'应该创build一个新条目。 它自己的入口对象有三个属性:name,description和id。

我认为,调用$ scope.save(); 会做两件事情:

  1. 将input字段映射为POST数据
  2. 对$资源中定义的URL(在本例中为“/ entry / api”)发一个POST请求

我见过的一些例子是手动将数据映射到资源,如:

var entry = new Entry(); entry.name = $name; // defined in entryController entry.description = $scope.description; // <-- defined in entryController entry.$save() 

我认为这不应该是必要的,因为这些字段是在html中定义的。 这个解决scheme导致:

  1. 在后端定义一个模型
  2. 在前端定义一个模型(entryController div
  3. 将entryController div的值添加到模型的JS版本中,最后保存。

这可能是AngularJS的工作方式,但是我认为html中的input字段会自动映射。

否则,如果添加或删除(后端)模型的属性,则代码中至less有3个位置要更新。

你应该如何使用AngularJS和$resource来保存新的对象?

 angular.module('entryManager', ['ngResource']); function pollController($scope, $resource) { $scope.polls = $resource('/entry/api/:id', {id: '@id'}); $scope.saveEntry = function() { this.save(); } } <html ng-app="entryManager"> ... <-- include angularjs, resource etc. <div ng-controller="entryController"> <input type='text' ng-model="name"><br/> <textarea ng-model="description" required></textarea><br/> <button class="btn btn-primary" ng-click="saveEntry()">Save</button> </div> 

首先应该注意, scope != model ,但范围可以包含模型。

你应该在你的范围内有一些对象,然后保存它。

所以,会有如下的东西:

HTML:

 <div ng-controller="entryController"> <input type='text' ng-model="poll.name"><br/> <textarea ng-model="poll.description" required></textarea><br/> <button class="btn btn-primary" ng-click="saveEntry()">Save</button> </div> 

JavaScript的:

 function pollController($scope, $resource) { var polls = $resource('/entry/api/:id', {id: '@id'}); $scope.saveEntry = function() { polls.save($scope.poll); } } 

注1:即使你没有初始化轮询对象,当你开始input时,AngularJS会自动创build新的对象。

注2:最好把你的表单封装到ngForm (通过在ng-form="someformname" ngForm添加ng-form="someformname"属性到div或者用<form name='...'>..</form>包装。你可以通过$scope.someformname.$valid在保存之前检查表单的有效性。

好的例子是在“接线后端”部分(btw,我的最爱)下的AngularJS网站的主页。

不要对模型对象本身使用save方法,使用模型类的save方法,例如 –

 //inject User resource here $scope.user = new User(); $scope.user.name = "etc"; User.save($scope.user,function(response){ }); 

以前我使用$scope.user.$save(function(response){})它正在清理我的$ scope.user对象