AngularJS - Предотвратить очистку формы

Когда моя форма с 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: { } }
      });
  });

2 ответа

Моя проблема была в том, что я звоню:

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

Это приведет к тому, что объект $scope.newOrder будет перезаписан объектом JSON, который возвращается методом create службы ресурсов. Это тогда очищает все поля формы, потому что я возвратил объект ошибки.

Меняя это на:

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

устраняет проблему

Я мог бы также изменить службу ресурсов, чтобы она возвращала код состояния HTTP, отличный от 200, и я считаю, что мой объект не был бы перезаписан.

Надеюсь, что это поможет любому с подобной проблемой.

Я думаю, что вы отправляете форму. Вместо этого сделайте ajax-вызов для отправки данных на сервер. Я думаю, что это будет работать.

Другие вопросы по тегам