为什么ng-show,ng-message总是显示
Why ng-show,ng-message are always displaying?
我遇到了一个非常简单的情况。当插入不正确的值时,我试图在表单中显示错误消息;奇怪的是,在网络上搜索我正在做正确的事情,但我总是显示所有消息。这是代码:
<form name="regForm" ng-controller="loginController as ctrl">
<fieldset>
<legend> Registration Form </legend>
<div>
<label for='name' > Name </label>
<input id='name' name='name' ng-model="form.name" type="text" required ng-minlength="3">
<div ng-messages="regForm.name.$error"
ng-if="regForm.name.$dirty">
<div ng-message="required">This field is required</div>
<div ng-message="minlength">This field must be over 3 characters</div>
</div>
</div>
<div>
<label for='surname' > Surname </label>
<input id='surname' name='surname' ng-model="form.surname" type="text" required ng-minlength="3" >
</div>
<div>
<label for='personalId' > Personal badge id </label>
<input id='personalId' name='personalId' ng-model="form.id" type="text" required>
</div>
<div>
<label for='email'> E-mail </label>
<input id='email' name='email' ng-model="form.mail" type="email" required>
</div>
<div>
<label for='emailOK' > Confirm e-mail </label>
<input id='emailOK' name='emailOK'ng-model="form.mail2" type="email" ng-match="form.mail" >
<span ng-show="(regForm.email.$modelValue !== regForm.emailOK.$modelValue)
&& regForm.email.$touched
&& !regForm.emailOK.$error.required">Email does not match.</span>
</div>
<div>
<label for='pwd'> Password </label>
<input id='pwd' name='pwd' ng-model="form.password" type="password" >
</div>
<div>
<label for='pwdOK' > Confirm password </label>
<input id='pwdOK' name='pwdOK' ng-model="form.password2" type="password" ng-pattern="form.password" >
<span ng-show="regForm.pwdOK.$error.pattern">Passwords have to match!</span>
</div>
<input type='button' value='submit' ng-click="check(this)" style='margin-left: 90px'>
我正在尝试同时使用 ng-show,ng-message,但它们没有按预期工作,有人可以帮助我吗?提前谢谢。
很抱歉没有足够的声誉,所以我将其作为答案发布。
在将对象分配给表单成员之前,需要对其进行初始化
JavaScript
angular.module('somemodule').controller('LoginCtrl', function ($scope) {
$scope.testForm = {};
}
.HTML
<form name="testForm" ng-controller="LoginCtrl">
<div>
<label for='surname' > Surname </label>
<input id='surname' name='surname' ng-model="testForm.surname" type="text" required ng-minlength="3" >
</div>
<span ng-show="testForm.surname.$valid">Oh! Your surname seems good</span>
</form>
建议对象名称与表单名称相同,以免弄乱。
解决方案
看起来您混淆了 2 个概念。Angular 只关心 HTML 表单和输入名称,当它应用$required
、$dirty
、$pristine
等样式时......当您查找输入值时不会。
比较输入值时,需要引用在 ng-model
指令中输入的内容。
- 删除
$modelValue
- 修正引用错误
您将输入元素绑定到 form.mail2
和 form.mail
。
替换为
<span ng-show="(form.mail !== form.mail2) && regForm.email.$touched && !regForm.emailOK.$error.required">Email does not match.</span>
我给你的建议...
你可能想从ng-show="(form.mail !== form.mail2)
开始,然后从那里建立你的表达......
相关文章:
- 根据特定条件使用ng显示/ng隐藏来显示/隐藏元素
- 如何在更改时显示ng个重复元素的总和
- Angular js将只显示ng repeat中的第一个元素
- 无法在 ng 重复中显示 ng 模板
- 将 ng-message 与 ng-requuried 一起使用
- 有角度的ng消息显示ng重复表单上的错误
- ng显示ng隐藏在ng中,重复如何为每个包裹的块单击/触发
- 在调用AJAX之后显示ng控制器的内容;作为“;作用
- AngularJS自定义指令ng显示/ng隐藏
- 只显示ng重复的第一个元素
- Angular JS ng grid:如何取消Edited Row以显示ng grid中的原始值
- Angularjs :如何用 Laravel 显示 ng-repeat 的内容
- AngularJS ng-click不显示ng-show消息
- 以随机顺序显示 ng 重复项目
- Angular JS自定义验证器失败,并显示“ng-invalid-maxlength”
- 为什么ng-show,ng-message总是显示
- AngularJs 条件显示 ng-options
- Angular-Material ngMessage 在将 ng-repeat 与 ng-message-exp 指令一
- Angularjs | ng-message在使用$compile从指令加载html时不显示错误信息
- 在Angularjs中,只有当验证失败时才显示ng-message的内容