使用AngularJS和$ resource保存新模型
我试图用$ resource来理解AngularJS,然而我在这里看到的大多数例子都没有解释如何使用$ resource实际创build新的实例(或者整个设置看起来如何)。 我已经发布我的代码在这个底部。
我有以下设置,发布到'/ entry / api'应该创build一个新条目。 它自己的入口对象有三个属性:name,description和id。
我认为,调用$ scope.save(); 会做两件事情:
- 将input字段映射为POST数据
- 对$资源中定义的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导致:
- 在后端定义一个模型
- 在前端定义一个模型(entryController
div
) - 将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对象