私はAngularフォームを持っています。ng-pattern
フィールドは属性を使用して検証されます。リセットボタンもあります。私は次のようにイベントを処理するためにUi.Utils Event Binderreset
を使用しています:
<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>
ご覧のとおり、フォームがリセットされると、 のreset
メソッドが呼び出され$scope
ます。コントローラ全体は次のようになります。
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
問題は、フォームをリセットした後でも、検証メッセージが消えないことです。Plunkerで完全なコードを見ることができます。エラーが消えないことを示すスクリーンショットを次に示します。