Javascript 为什么总是显示ng show、ng消息?
我遇到了一个非常简单的问题:当插入错误的值时,我试图在表单中显示错误消息;奇怪的是,在网上搜索我做的是对的,但我总是显示所有的信息。代码如下:Javascript 为什么总是显示ng show、ng消息?,javascript,angularjs,Javascript,Angularjs,我遇到了一个非常简单的问题:当插入错误的值时,我试图在表单中显示错误消息;奇怪的是,在网上搜索我做的是对的,但我总是显示所有的信息。代码如下: <form name="regForm" ng-controller="loginController as ctrl"> <fieldset> <legend> Registration Form </legend> <div>
<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'>
登记表
名称
此字段必填
此字段必须超过3个字符
姓
个人徽章id
电子邮件
确认电子邮件
电子邮件不匹配。
密码
确认密码
密码必须匹配!
我正在尝试ng show和ng message,但它们没有按预期工作,有人能帮我吗?提前谢谢。解决方案
看起来你有两个概念混淆了。Angular仅在为$required
、$dirty
、$pristine
等应用样式时才关心HTML表单和输入名称……而不是在查找输入值时
在比较输入值时,需要参考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)
开始,并从那里构建您的表达…很抱歉没有足够的声誉,因此我将此作为一个答案发布
对象在分配给表单成员之前需要初始化
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>
姓
哦!你的姓似乎不错
建议对象名称与表单名称相同,以避免混乱。“它们不能按预期工作。”" .. 我们不知道期望值是什么,也不知道发生了什么。提供适当的问题描述以及预期的行为。一个演示肯定会帮助您在您的应用程序中实现$modelValueboolean@charlietfl我希望div或ng消息在我写东西时显示,而不是在我加载页面时显示;特别是对于确认电子邮件,当两个值不同时,span应该出现,但这里不会出现这种情况。拉斐尔,刚起飞,但没什么变化。请出示你的控制器。谁知道你的控制器是否真的被称为loginController,你是否在使用别名,但你在视图中没有使用别名。我已经按照你说的做了,但没有任何更改。即使我键入两封相同的电子邮件,文本电子邮件也不匹配。
!regForm.emailOK.$error.required
布尔值中的此部分看起来不正确。您还使用了控制器别名,这些别名可归因于代码中的进一步引用问题。如果没有看到你的控制器,我真的帮不了你。我只放了(form.mail!==form.mail2)而没有另一张支票,但它不起作用。我的控制器目前是空的,我只有模块var app=angular.module('app',['ngMessages');解决所有这些问题时,我需要控制器。您正在为控制器使用名为ctrl
的别名。因此,您应该使用ctrl.form.mail
和ctrl.form.mail2
。在控制器中,您还需要this.form={}