【发布时间】:2015-09-09 16:24:57
【问题描述】:
我有一个 Angular 表单。这些字段使用ng-pattern 属性进行验证。我也有一个重置按钮。我正在使用Ui.Utils Event Binder 来处理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,遵循 Stack Overflow 上 another question 的建议。我添加计数器的唯一原因是为了证明代码正在被调用(确实如此)。
问题是即使在重置表单之后,验证消息也不会消失。您可以在Plunker 上查看完整代码。这是显示错误不会消失的屏幕截图:
【问题讨论】:
-
唯一对我有用的是手动重置每个表单变量(即
form.areaCode = '';和form.phoneNumber = '';)。这就是你通常的做法。
标签: html angularjs ng-messages