2014-04-02 81 views
1

當我的表單提交了ng-submit =「createNewOrder()」時,我調用一個執行服務器端驗證的資源服務。但是,服務返回後,表單域將被清除。如何阻止Angular清除字段,直到資源服務返回表示成功的響應?AngularJS - 防止表單清除

編輯:添加代碼

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: { } } 
     }); 
    }); 
+0

編寫代碼,我也有一個表單,沒有什麼清楚的,所以也許這是代碼中的錯誤。 – mautrok

+0

看到這個答案 - http://stackoverflow.com/questions/16153313/saving-new-models-using-angularjs-and-resource/33991999#33991999 – Vivek

回答

0

我想你是在提交表格。而不是這樣做,做一個ajax調用發送數據到服務器。我認爲它會起作用。

+0

這不是很清楚我... – glepretre

+0

這對我來說是完美的!謝謝! –

1

我的問題是,我打電話:

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

這將導致$ scope.newOrder對象與由該資源服務的創建方法返回的JSON對象覆蓋。這會清除所有表單域,因爲我返回了一個錯誤對象。

此更改爲:

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

修復該問題。

我也可以更改資源服務以返回非200 HTTP狀態代碼,我相信我的對象不會被覆蓋。

希望能幫助那些有類似問題的人。

+0

這也解決了我的問題,謝謝 – VsMaX

+0

https://docs.angularjs.org/api/ngResource/service/$resource它說沒有創建方法,只有保存在那裏。 – Vivek