我有一個角度的形式。這些字段使用ng-pattern
屬性進行驗證。我也有一個重置按鈕。我使用的是3210處理reset
事件,像這樣:如何重置表單,包括刪除所有驗證錯誤?
<form name="searchForm" id="searchForm" ui-event="{reset: 'reset(searchForm)'}" ng-submit="search()">
<div>
<label>
Area Code
<input type="tel" name="areaCode" ng-model="areaCode" ng-pattern="/^([0-9]{3})?$/">
</label>
<div ng-messages="searchForm.areaCode.$error">
<div class="error" ng-message="pattern">The area code must be three digits</div>
</div>
</div>
<div>
<label>
Phone Number
<input type="tel" name="phoneNumber" ng-model="phoneNumber" ng-pattern="/^([0-9]{7})?$/">
</label>
<div ng-messages="searchForm.phoneNumber.$error">
<div class="error" ng-message="pattern">The phone number must be seven digits</div>
</div>
</div>
<br>
<div>
<button type="reset">Reset</button>
<button type="submit" ng-disabled="searchForm.$invalid">Search</button>
</div>
</form>
正如你所看到的,當表單被重置它呼籲$scope
的reset
方法。這裏是整個控制器的樣子:
angular.module('app').controller('mainController', function($scope) {
$scope.resetCount = 0;
$scope.reset = function(form) {
form.$setPristine();
form.$setUntouched();
$scope.resetCount++;
};
$scope.search = function() {
alert('Searching');
};
});
我打電話form.$setPristine()
和form.$setUntouched
,以下從another question這裏對堆棧溢出的意見。我添加計數器的唯一原因是要證明代碼正在被調用(它是什麼)。
問題是,即使重新設置窗體後,驗證消息也不會消失。您可以在Plunker上看到完整的代碼。下面是顯示該錯誤不會消失截圖:
只有似乎事爲我工作是手動重置每個表單變量(即'form.areaCode ='';'和'form.phoneNumber ='';')。這就是你通常會這樣做的方式。 – Brett