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={}