2015-10-06 148 views
2

我想在提交表單後重置表單和所有驗證消息。這裏是plunker:http://plnkr.co/edit/992RP8gemIjgc3KxzLvQ?p=preview如何在提交表單後重置表單和驗證(AngularJS)

我的代碼是波紋管:

控制器:

app.controller('MainCtrl', function($scope) { 
    $scope.data={fullName:''}; 

    $scope.submit=function(){ 
    console.log('submit') 
    $scope.myForm.$setPristine(); 
    $scope.myForm.$setUntouched(); 
    $scope.data={fullName:''}; 
    } 
}); 

HTML:

<body ng-controller="MainCtrl"> 
<form name="myForm" novalidate> 
<div> 
    <label class="control-label">Name</label> 
    <input 
      name="full_name" 
      type="text" 
      ng-model="data.fullName" 
      ng-required="true"> 

    <p ng-if="myForm.$submitted && myForm.$invalid">Validation message</p> 
</div> 
<button ng-click="submit()" type="submit"> 
    Submit 
</button> 
</form> 
</body> 

我的問題是: 當用戶在輸入和點擊進入名在提交按鈕上,不應該顯示驗證消息,因爲應該重新設置模型,表單和驗證。我如何做到這一點?

我試圖使用$ setPristine()和$ setUntouched(),但它不適用於我。

在AngularJS中可以做什麼?謝謝!

+0

http://stackoverflow.com/questions/26015010/angularjs-form-reset的重複-error – DexTer

回答

2

我很高興,但$setpristine()不更新$submitted

這可能不是最漂亮的解決方案,但似乎工作:

app.controller('MainCtrl', function($scope, $timeout) { 
    $scope.data = { 
    fullName: '' 
    }; 
    $scope.submit = function() { 
    console.log('submit') 
    $scope.data = { 
     fullName: '' 
    }; 
    $timeout(function() { 
     $scope.myForm.$setPristine(); 
     $scope.myForm.$setUntouched(); 
     $scope.myForm.$submitted = false; 
    }); 
    } 
}); 

DEMO

+0

謝謝...我已經這樣使用它:

+0

是否可以使用'$ scope.myForm'獲取所有表單輸入值? –