简体   繁体   English

Angular - 如何使用第三方验证文本输入数据 api

[英]Angular - How to validate text input data using third party api

In Angular-14, I am working on a project that inserts using data into the database.在 Angular-14 中,我正在开发一个将使用数据插入数据库的项目。 Then validate the account number from third party api.然后验证来自第三方 api 的帐号。

component.ts:组件.ts:

ngOnInit(): void {
 this.createMerchant();
}

createMerchant() {
 this.createMerchantForm = this.fb.group({
  userName: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(50), UsernameValidator.cannotContainSpace]],
  merchantName: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(100)]],
  email: ['', [Validators.required, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$')]],
  accountNumber: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(50), Validators.pattern('^[0-9]*$')]],
})

onMerchantSubmitForm() {
 this.isSubmitted = true;
 if (this.createMerchantForm.invalid) {
  return;
}
this.isLoading = true;
const formData = this.createMerchantForm.value;

this.merchantService.createMerchant(formData).subscribe({
  next: (res: any) => {
    this.toastr.success(res.message);
    this.isLoading = false;
    this.onClose();
  },
  error: (error) => {
    let errorMessage = '';
    if(error.error instanceof ErrorEvent) {
      errorMessage = error.message;
    } else {
      errorMessage = error.error.message;
    }
    this.toastr.error(errorMessage);
    this.isLoading = false;
    }
})

} }

component.html:组件.html:

<form class="form-horizontal" id="add-form" [formGroup]="createMerchantForm" (ngSubmit)="onMerchantSubmitForm()">
  <div class="modal-body">
    <div class="row">
      <div class="col-md-6">
        <div class="form-group">
          <label for="userName">User Name<span style="color:red;">*</span></label>
          <input type="text" class="form-control" formControlName='userName' id="username" placeholder="Username">
          <div *ngIf="fc['userName'].touched && fc['userName'].invalid" class="alert alert-danger">
            <div *ngIf="fc['userName'].errors && fc['userName'].errors['required']">Username is required!</div>
            <div *ngIf="fc['userName'].errors && fc['userName'].errors['minlength']">Username cannot be less than 5 characters!</div>
            <div *ngIf="fc['userName'].errors && fc['userName'].errors['maxlength']">Username cannot be more than 50 characters!</div>
            <div *ngIf="fc['userName'].errors && fc['userName'].errors['cannotContainSpace']">Space not allowed in Username!</div>
          </div>
        </div>
      </div>
      <div class="col-md-6">
        <div class="form-group">
          <label for="merchantName">Merchant Name<span style="color:red;">*</span></label>
          <input type="text" class="form-control" formControlName='merchantName' id="merchantName" placeholder="Merchant Name">
          <div *ngIf="fc['merchantName'].touched && fc['merchantName'].invalid" class="alert alert-danger">
            <div *ngIf="fc['merchantName'].errors && fc['merchantName'].errors['required']">Merchant Name is required!</div>
            <div *ngIf="fc['merchantName'].errors && fc['merchantName'].errors['minlength']">Merchant Name cannot be less than 3 characters!</div>
            <div *ngIf="fc['merchantName'].errors && fc['merchantName'].errors['maxlength']">Merchant Name cannot be more than 100 characters!</div>
          </div>
        </div>
      </div>
      <div class="col-md-6">
        <div class="form-group">
          <label for="email">Email<span style="color:red;">*</span></label>
          <input type="email" class="form-control" formControlName='email' id="email" placeholder="example@email.com">
          <div *ngIf="fc['email'].touched && fc['email'].invalid" class="alert alert-danger">
            <div *ngIf="fc['email'].errors && fc['email'].errors['required']">Email is required!</div>
            <div *ngIf="fc['email'].errors && fc['email'].errors['pattern']">Enter Appropriate Email Address!</div>
          </div>
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-md-6">
        <div class="form-group">
          <label for="email">Email<span style="color:red;">*</span></label>
          <input type="email" class="form-control" formControlName='email' id="email" placeholder="example@email.com">
          <div *ngIf="fc['email'].touched && fc['email'].invalid" class="alert alert-danger">
            <div *ngIf="fc['email'].errors && fc['email'].errors['required']">Email is required!</div>
            <div *ngIf="fc['email'].errors && fc['email'].errors['pattern']">Enter Appropriate Email Address!</div>
          </div>
        </div>
      </div>
      <div class="col-md-6">
        <div class="form-group">
          <label for="accountNumber">Account Number<span style="color:red;">*</span></label>
          <input type="text" class="form-control" formControlName='accountNumber' id="accountNumber" placeholder="Account Number">
          <div *ngIf="fc['accountNumber'].touched && fc['accountNumber'].invalid" class="alert alert-danger">
            <div *ngIf="fc['accountNumber'].errors && fc['accountNumber'].errors['required']">Account Number is required!</div>
            <div *ngIf="fc['accountNumber'].errors && fc['accountNumber'].errors['minlength']">Account Number cannot be less than 5 characters!</div>
            <div *ngIf="fc['accountNumber'].errors && fc['accountNumber'].errors['maxlength']">Account Number cannot be more than 50 characters!</div>
            <div *ngIf="fc['accountNumber'].errors && fc['accountNumber'].errors['pattern']">Enter only numbers for Account Number!</div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="modal-footer">
    <button type="button" id="cancelCreate" class="btn btn-secondary" data-dismiss="modal" (click)="onClose()">Close</button>
    <button type="submit" class="btn btn-success" [disabled]="isLoading" (click)="createValidate()"><span *ngIf="isLoading" class="spinner-border spinner-border-sm mr-1"></span>
      <i class="fa fa-save" aria-hidden="true"></i> Submit</button>
  </div>
</form>

Then I have this third party api:然后我有这个第三方api:

https://thirtpartyapi.com/AccountDetail?accountNumber https://thirtpartyapi.com/AccountDetail?accountNumber

which appears this way:以这种方式出现:

{
    "AccountNumber": "0987654321",
    "CustomerName": "Frank Akwetey"
}

accountNumber is the parameter accountNumber是参数

What I want to achieve is that when the user enters data into AccountNumber into the textinput field, the application should validate using the third party api, and also display the CustomerName of the corresponding AccountNumber in a label under the accountNumber textinput field.我想要实现的是,当用户将数据输入AccountNumber到 textinput 字段时,应用程序应使用第三方 api 进行验证,并在 accountNumber 文本输入字段下的 label 中显示相应 AccountNumber 的CustomerName

How do I achieve this?我如何实现这一目标?

Thank you谢谢

The simplest way to achieve this is to know the length of a valid account number.实现这一点的最简单方法是知道有效帐号的长度。 Let suppose if an account number cannot be greater or less than 11 digits then.假设一个帐号不能大于或小于 11 位数字。

if (this.createMerchantForm.value.accountNumber.length === 11) {
  this.http.post(
    `https://thirtpartyapi.com/AccountDetail?${this.createMerchantForm.value.accountNumber}`
    ).subscribe(
    (response: any) => {
      console.log(response); //account holder details if valid else no account found or error
    },
    (error: any) => {},
  );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM