39

我正在尝试使用 $resource 来了解 AngularJS,但是我看到的大多数示例都没有解释如何使用 $resource 实际创建某些东西的新实例(或者整个设置的外观)。我已经在底部发布了我的代码。

我有以下设置,其中发布到“/entry/api”应该创建一个新条目。它自身的入口对象具有三个属性:名称、描述和标识。

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

  1. 将输入字段映射为 POST 数据
  2. 向 $resource 中定义的 url 发出 POST 请求(在本例中为“/entry/api”)

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

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

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

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

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

否则,如果添加或删除(后端)模型的属性,则代码中至少有 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>
4

2 回答 2

46

第一个认为您应该注意的是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:即使你没有初始化 poll 对象,AngularJS 也会在你开始输入时自动创建新对象。

注意2:最好将表单包装成ngForm(通过ng-form="someformname"使用ng-controller向div添加属性或使用包装。在这种情况下,您可以在保存之前<form name='...'>..</form>检查表单的有效性。$scope.someformname.$valid

很好的例子是在“连接后端”部分(顺便说一句,我最喜欢的)下的 AngularJS 网站主页上。

于 2013-04-22T18:58:56.170 回答
4

不要对模型对象本身使用保存方法,使用模型类的保存方法,例如 -

//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 对象

于 2015-11-30T05:33:22.457 回答