Angular 密码比较指令@input在角度模板驱动形式中始终未定义

Angular 密码比较指令@input在角度模板驱动形式中始终未定义,angular,Angular,您好,我正在尝试创建一个角度指令来比较密码和确认密码。我尝试了网络上显示的许多示例,但似乎都不起作用。在验证函数中,@input值始终未定义,哪里会出错 下面是我的模板代码 <div> <h1>Add user</h1> <form #f="ngForm" novalidate> <div> <label>Password</label> <input

您好,我正在尝试创建一个角度指令来比较密码和确认密码。我尝试了网络上显示的许多示例,但似乎都不起作用。在验证函数中,@input值始终未定义,哪里会出错

下面是我的模板代码

<div>
  <h1>Add user</h1>
  <form #f="ngForm" novalidate>
  
  <div>
    <label>Password</label>
    <input type="password" name="password" [ngModel]="user.password" 
      required #password="ngModel">
    <small [hidden]="password.valid || (password.pristine &&    
      !f.submitted)">
      Password is required
    </small>
 </div>
 <div>
    <label>Retype password</label>
    <input type="password" name="confirmPassword"    
      [ngModel]="user.confirmPassword"
      required compare="password" #confirmPassword="ngModel">
    <small [hidden]="confirmPassword.valid ||  
      (confirmPassword.pristine && !f.submitted)">
      Password mismatch
    </small>
 </div>
  </form>
 </div>

它打印未定义,因为您通过
useClass
告诉Angular为validator创建一个新的ValidateEqualDirective实例:

providers:[{provide:NG_VALIDATORS, useClass:ValidateEqualDirective
                                   ^^^^
这意味着您有两个类的实例:第一个是绑定到html结构的,第二个是为验证而创建的

您应该使用相同的指令实例:

providers:[{provide:NG_VALIDATORS, useExisting: ValidateEqualDirective
                                  ^^^^^^^^^^^^^^^
                             reuse current directive instance
providers:[{provide:NG_VALIDATORS, useExisting: ValidateEqualDirective
                                  ^^^^^^^^^^^^^^^
                             reuse current directive instance