Angular 是否需要帮助进行远程验证以检查电子邮件是否存在或未使用IO

Angular 是否需要帮助进行远程验证以检查电子邮件是否存在或未使用IO,angular,Angular,我尝试使用下面的代码调用远程验证 在组件文件中 验证码 this.formCompany = this.fb.group({ varEmail: [null, Validators.compose([Validators.required, Validators.maxLength(150),this.emailExist.bind(this)])], }}); 用于检查电子邮件是否存在的功能 emailExist(control: FormControl) { if(con

我尝试使用下面的代码调用远程验证

在组件文件中

验证码

this.formCompany = this.fb.group({
    varEmail: [null, Validators.compose([Validators.required, Validators.maxLength(150),this.emailExist.bind(this)])],
}});
用于检查电子邮件是否存在的功能

emailExist(control: FormControl) {

    if(control.value) {  
      this.services.emailExist(control.value).subscribe(res => {this.checkEmailExist = res;
        if(this.checkEmailExist.exist > 0) {
            return { 'emailexist': true };
        } else {
             return null;
        }
        } );
    } else {
        return null;
    }
}
HTML代码

<div fxLayout="row" fxLayoutWrap="wrap">
   <md-input-container class="ml-xs mr-xs" style="width: 60%">
      <input mdInput placeholder="Email Address" maxlength="150"  [ngModel]="CompanyEdit.varEmail" [formControl]="formCompany.controls['varEmail']">
   </md-input-container>
<small *ngIf="formCompany.controls['varEmail'].hasError('required') && formCompany.controls['varEmail'].touched" class="mat-text-warn">Please insert email address.</small>
<small *ngIf="formCompany.controls['varEmail'].hasError('maxlength') && formCompany.controls['varEmail'].touched" class="mat-text-warn">Email address can not exceed 150 characters.</small>
<small *ngIf="formCompany.controls['varEmail'].hasError('emailexist') && formCompany.controls['varEmail'].touched" class="mat-text-warn">Email address already exist.</small>
</div>

请插入电子邮件地址。
电子邮件地址不能超过150个字符。
电子邮件地址已存在。

此代码不起作用

您需要绑定
,以便拥有
的正确(外部)范围。通过绑定
this
您可以参考
this.services
(例如,它不属于此
emailExist
功能)

我建议您阅读关于
这个
-关键字的这篇精彩问答:

因此,您需要做的只是:

this.emailExist.bind(this)

在您的
验证器
数组中。

如果电子邮件存在,则控件有效,否则无效,这就是您想要的?对,但这里我通过
this.services调用服务。因此,它给了我一个错误,即无法读取未定义的属性“services”。我在插入和更新代码时使用了相同的服务。你能给我看一下你的构造函数吗,让你注入
服务
?你可以通过设置完整的代码来编辑问题吗?(重要的部分)你需要绑定
这个
,这样
这个
就会有你想要的范围,所以请绑定这个.emailExist.bind(这个)
@AJT\u 82你说得对!我忘了这一点,它现在正在工作,得到了服务部门的响应。但验证不起作用Kay。。。不工作意味着什么?如果你的回答是有效的,你的回答是什么?如果不是,你的回答是什么?您没有在订阅中设置任何验证器:)请仔细查看您的代码。。。拥有自定义验证程序。。。它会给服务打很多次电话。。。也许你想重新考虑这个问题?你会重新考虑这个请求,并根据其他条件提出请求,因为这种方式可能不是最好的。这会产生一系列api调用,如果您在键入时这样做,它甚至没有时间执行上一个调用……是的。我尝试在更改时调用此服务,但无法在onChange事件中调用此服务。