Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng消息无法使用重新键入密码验证AngularJS_Javascript_Angularjs_Ng Messages - Fatal编程技术网

Javascript ng消息无法使用重新键入密码验证AngularJS

Javascript ng消息无法使用重新键入密码验证AngularJS,javascript,angularjs,ng-messages,Javascript,Angularjs,Ng Messages,下面是我的代码,它可以很好地处理密码,但不知何故,重新键入密码验证不起作用。让我知道我做错了什么 <div class="form-group has-feedback"> <input type="password" class="form-control" placeholder="Password" ng-model="vm.user.password" name="password" required="" ng-minlength="6" ng-maxle

下面是我的代码,它可以很好地处理密码,但不知何故,重新键入密码验证不起作用。让我知道我做错了什么

  <div class="form-group has-feedback">
    <input type="password" class="form-control" placeholder="Password" ng-model="vm.user.password" name="password" required="" ng-minlength="6" ng-maxlength="20" />
    <div class="help-block" ng-messages="userForm.password.$error" ng-if="userForm.password.$touched">
      <p ng-message="minlength, maxlength, required">Please enter a password containing 6 to 20 characters.</p>
    </div>        
  </div>
  <div class="form-group has-feedback">
    <input type="password" class="form-control" placeholder="Retype password" name="retypePassword" required="" ng-model="vm.user.retypePassword">
    <div class="help-block" ng-messages="userForm.retypePassword.$error" ng-if="userForm.retypePassword.$touched">
      <p ng-message when="vm.user.retypePassword !== vm.user.password" >Please retype your correct password.</p>
    </div>

请输入包含6到20个字符的密码

请重新键入正确的密码


在这篇文章中,他们提到我们可以使用表达式,但不知怎么的,它并没有得到验证。

我相信你的用法是错误的。在多消息情况下使用
when
属性,它使用字符串键或键数组检查定义的错误是否存在,基本上就像ng message属性一样

您可以使用指令创建自定义验证器,如explained

您还可以简单地使用ng change函数操作$error对象,如下所示:

<input type="password" ng-model="vm.user.retypePassword"
    ng-change="setMatchError(userForm.retypePassword,userForm.password)">
最后,您将能够使用ng message指令引用它

<p ng-message="match">Your passwords must match!</p>

您的密码必须匹配

您的密码必须匹配

尽管最后一种方法可能不赞成表单直接在应用程序代码中操作角度对象

但是,需要注意的一点是,如果输入未通过html5验证,则模型不会得到更新,因此您将无法引用模型值


最后一个选项:您可以完全忽略确认密码上的ng message(s)指令(因为它实际上不会给您太多信息),如果需要,只需使用ng即可
和ng更改和直接模型验证。

在这种情况下,您可以使用一个指令来帮助创建自己的检查,如ng required、ng minlength或ng pattern

<form name="ExampleForm">
  <label>Password</label>
  <input ng-model="password" required />
  <br>
  <label>Confirm password</label>
  <input ng-model="confirmPassword" required use-form-error="dontMatch" use-error-expression="password && confirmPassword && password!=confirmPassword" />
  <div ng-messages="ExampleForm.$error" class="errors">
    <div ng-message="dontMatch">
      Passwords Do Not Match!
    </div>
  </div>
</form>

密码

确认密码 密码不匹配!
现场示例。

如中所述 您需要在when属性中提供错误名称 若你们需要使用表达式,你们需要把你们的表达式放在消息块中,所以像这样改变你们的div块

<div class="help-block" ng-messages="multipleValueExpression">
      <p ng-message when="value1" >Please retype your correct password.</p>
</div>

请重新键入正确的密码

或者,您也可以通过如下方式更改whenwhen exp来实现同样的效果

<p ng-message when-exp="vm.user.retypePassword !== vm.user.password" >Please retype your correct password.</p>
请重新键入正确的密码时发出消息


祝你好运

如果你仔细看,我做了同样的事情,当使用switch语句值时会有区别,它来自ng messages表达式值,当exp不依赖于ng messages时,它会直接计算给定的表达式,并相应地执行值=[“yes”、“no”、“maybe”]

请重新键入正确的密码。

使用when exp

请重新键入正确的密码。

<div class="help-block" ng-messages="multipleValueExpression">
      <p ng-message when="value1" >Please retype your correct password.</p>
</div>
<p ng-message when-exp="vm.user.retypePassword !== vm.user.password" >Please retype your correct password.</p>