【问题标题】:AngularJS - Prevent Form ClearAngularJS - 防止表单清除
【发布时间】:2014-04-03 15:18:32
【问题描述】:

当我使用 ng-submit="createNewOrder()" 提交表单时,我会调用一个资源服务来执行一些服务器端验证。但是,服务返回后,表单字段会被清除。在资源服务返回指示成功的响应之前,如何防止 Angular 清除字段?

编辑:添加代码

HTML:

<div ng-app="OrdersApp" ng-controller="OrdersController" class="ng-scope">
  <form name="newOrderForm" ng-submit="createNewOrder();" novalidation>
    <label>First Name</label>
    <input type="text" ng-model="newOrder.firstName" required>
    <label>Last Name</label>
    <input type="text" ng-model="newOrder.lastName" required>
    etc.
  </form>
</div>

应用:

var app = angular.module('OrdersApp', ['orderServices']);

控制器:

app.controller('OrdersController', function ($scope, Order) {
  $scope.newOrder = new Order({ });
  $scope.createNewOrder = function () {
    $scope.newOrder.$create(
      function(successData) {
        if (successData.error) return alert('order was not saved successfully');
        alert('order successfully charged and created');
      },
      function(errorData) { 
        alert('order was not saved successfully: ' + JSON.stringify(errorData));
      }
    );
  };
});

服务:

angular.module('orderServices', ['ngResource']).
  factory('Order', function ($resource) {
    return $resource('/admin/json/orders', {},
      {
        query: { method: 'GET', params: { }, isArray: true },
        create: { method: 'POST', params: { } },
        save: { method: 'PUT', params: { } }
      });
  });

【问题讨论】:

标签: angularjs


【解决方案1】:

我的问题是我正在打电话:

$scope.newOrder.$create(...)

这将导致 $scope.newOrder 对象被资源服务的 create 方法返回的 JSON 对象覆盖。然后这会清除所有表单字段,因为我返回了一个错误对象。

将其更改为:

Order.create($scope.newOrder, ...)

解决了这个问题。

我也可以更改资源服务以返回非 200 HTTP 状态代码,并且我相信我的对象不会被覆盖。

希望对遇到类似问题的人有所帮助。

【讨论】:

【解决方案2】:

我认为您正在提交表单。不要这样做,而是进行 ajax 调用以将数据发送到服务器。我认为它会起作用。

【讨论】:

  • 对我来说太完美了!谢谢!
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多