【发布时间】:2016-06-24 17:44:45
【问题描述】:
我正在使用 Angular 1.4.7 并希望在提交表单时显示字段验证错误(而不是在字段内容更改时)。我目前的做法是这样的:
<!DOCTYPE html>
<html ng-app="exampleApp">
<head>
<script src="angular.js"></script>
<link href="bootstrap.css" rel="stylesheet"/>
<script>
angular.module("exampleApp", [])
.controller("defaultCtrl", function ($scope) {
$scope.addUser = function (userDetails) {
if (myForm.$valid) {
// send form data to server, or whatever....
} else {
$scope.showValidation = true;
}
};
$scope.getError = function (error) {
if (angular.isDefined(error)) {
if (error.required) {
return "Please enter a value";
} else if (error.email) {
return "Please enter a valid email address";
}
}
}
});
</script>
<style>
form.validate .ng-invalid-required.ng-dirty {
background-color: lightpink;
}
form.validate .ng-invalid-email.ng-dirty {
background-color: lightgoldenrodyellow;
}
div.error {
color: red; font-weight: bold;
}
</style>
</head>
<body>
<div id="todoPanel" class="panel" ng-controller="defaultCtrl">
<form name="myForm" novalidate ng-submit="addUser(newUser)"
ng-class="showValidation ? 'validate' : ''">
<div class="well">
<div class="form-group">
<label>Email:</label>
<input name="userEmail" type="email" class="form-control"
required ng-model="newUser.email">
<div class="error" ng-show="showValidation">
{{getError(myForm.userEmail.$error)}}
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">OK</button>
</div>
</form>
</div>
</body>
</html>
请注意,$scope.showValidation 用于确保在提交表单之前不会显示验证消息。 $scope.getError 用于减少确定要显示哪条消息所需的标记数量(尽管在此示例中表单只有一个字段)。
我觉得必须有更好的方法,当表单有很多字段时,显示相应错误消息所需的代码会变得非常冗长,并且有几种不同的方法可以使字段无效。有没有办法简化上面的代码或使其更简洁?
【问题讨论】:
标签: javascript angularjs forms validation