AngularJS:在更改/键入/立即显示表单输入错误
AngularJS: Show form input error on change / typing / immediately
如果您在下面的示例中删除了输入元素中的初始文本,那么在模糊该元素之前它不会显示错误。
我想让输入元素的下划线变成红色,并在您删除输入中的最后一个字符时立即显示错误。
有人有什么想法吗?
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link
rel="stylesheet"
href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container>
<input
name="testInput"
ng-model="demo.name"
required
aria-label="test input"
type="text">
<ng-messages
for="testForm.testInput.$error"
role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>
实现此目的的一种方法是在您的输入中添加 ng-change="testForm.$setSubmitted()"
。这将直接触发更改时的表单验证。在 ng-change
上使用 testForm.$setSubmitted()
时,您需要检查依赖函数。也许您的应用程序中的其他一些行为可能会受到影响。
<input name="testInput"
ng-model="demo.name"
ng-change="testForm.$setSubmitted()"
required
aria-label="test input"
type="text">
示例:
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container>
<input name="testInput"
ng-model="demo.name"
required
aria-label="test input"
ng-change="testForm.$setSubmitted()"
type="text">
<ng-messages for="testForm.testInput.$error" role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>
这是 md-input-container
中动画触发方式的一个怪癖。 Angular Material 有一个标志,允许您在检查输入错误时更改,以最小化动画循环。默认值有点过于严格,但可以更改。
md-input-container
有一个可以添加的可选标志:md-is-error
。这允许您传递一个表达式来控制何时检查输入是否有错误。
试试这个:<md-input-container md-is-error="testForm.testInput.$invalid">
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container md-is-error="testForm.testInput.$invalid">
<input name="testInput"
ng-model="demo.name"
required
aria-label="test input"
type="text">
<ng-messages for="testForm.testInput.$error" role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>
如果您在下面的示例中删除了输入元素中的初始文本,那么在模糊该元素之前它不会显示错误。
我想让输入元素的下划线变成红色,并在您删除输入中的最后一个字符时立即显示错误。
有人有什么想法吗?
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link
rel="stylesheet"
href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container>
<input
name="testInput"
ng-model="demo.name"
required
aria-label="test input"
type="text">
<ng-messages
for="testForm.testInput.$error"
role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>
实现此目的的一种方法是在您的输入中添加 ng-change="testForm.$setSubmitted()"
。这将直接触发更改时的表单验证。在 ng-change
上使用 testForm.$setSubmitted()
时,您需要检查依赖函数。也许您的应用程序中的其他一些行为可能会受到影响。
<input name="testInput"
ng-model="demo.name"
ng-change="testForm.$setSubmitted()"
required
aria-label="test input"
type="text">
示例:
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container>
<input name="testInput"
ng-model="demo.name"
required
aria-label="test input"
ng-change="testForm.$setSubmitted()"
type="text">
<ng-messages for="testForm.testInput.$error" role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>
这是 md-input-container
中动画触发方式的一个怪癖。 Angular Material 有一个标志,允许您在检查输入错误时更改,以最小化动画循环。默认值有点过于严格,但可以更改。
md-input-container
有一个可以添加的可选标志:md-is-error
。这允许您传递一个表达式来控制何时检查输入是否有错误。
试试这个:<md-input-container md-is-error="testForm.testInput.$invalid">
var app = angular.module('myApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function() {
this.name = 'test text';
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.css">
</head>
<body ng-app="myApp">
<div ng-controller="DemoCtrl as demo">
<form name="testForm">
<md-input-container md-is-error="testForm.testInput.$invalid">
<input name="testInput"
ng-model="demo.name"
required
aria-label="test input"
type="text">
<ng-messages for="testForm.testInput.$error" role="alert">
<ng-message when="required">
<span>
required
</span>
</ng-message>
</ng-messages>
</md-input-container>
</form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.6/angular-material.min.js"></script>
</body>
</html>