Cum de a face un mesaj de eroare pentru a afișa pentru acel câmp special de intrare folosind angular2

voturi
1

Am mai multe câmpuri de intrare, adăugarea și schimbarea sunt de lucru bine cu acel fieds, dar atunci când vin la eroare secțiune mesaj, în cazul în care există eror câmp de intrare într-un câmp este prezentat în toate celelalte domenii. Dar, vreau să afișeze eroare pentru domeniul respectiv.

HTML:

<md-card-content>
  <ul class=listClass>
    <li *ngFor=let media of videos; let i = index >
      <div>
        <input type=text name=`media`.`_id`[i] id=`media`.`_id`[i] class=form-control form-textbox input-text [(ngModel)]=media.editText #editText pattern=/^(ftp|http|https):\/\/[^ ]+$/ style=width: 58%;margin-left: 1%;>
      </div>
      <div *ngIf=errorMsg style=color:red>
        `errorMsg`
      </div>
      <p class=inputimg style=float: right;display: inline-block>
        <label *ngIf=media._id class=img_change (click)=change($event,media) style=width: 100px;>Change Link</label>
        <label *ngIf=!media._id class=img_change (click)=changetext($event,media) >Add Link</label>
      </p>
    </li>
  </ul>
</md-card-content>

TS:

    change(event: any, media) {
    if (media.editText.indexOf('https://www.youtube.com/embed') != -1) {
      this.errorMsg=;
      if (!media._id) {
        var data:any = {
          pin_id: this.pin_id,
          media_type: video,
          image_path: media.editText
        } 
        this.ApiService
            .addLinkMedia(data)
            .subscribe(
              media => {
              })
      } else if(media._id) {
        var data:any = {
          media_id: media._id,
          image_path: media.editText
        } 
        this.ApiService
            .addLinkMedia(data)
            .subscribe(
              media => {
                this.loadMedias()
              }, error => {
              })
      }
    } else {
      this.errorMsg = Please enter valid URL;
    }
}

Aici am folosit havent validările formular.

Întrebat 18/04/2018 la 05:39
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
3

Ia - o variabilă, care stochează ida mediași de afișare a mesajelor de eroare în mod corespunzător , în funcție de ID - ul de mass - media .

  • Eu m atribuind this.errorDiv[media._id] = true;;astfel încât să pot utiliza errorDivîn * ngIf
  • In HTML am folosit , *ngIf="errorMsg[media._id] && (errorDiv[media._id])"care verifică mesajul de eroare și ID - ul și de eroare de afișare specifică mesajul în mod corespunzător

HTML:

<div>
    <input type="text" name="`media`.`_id`[i]" id="`media`.`_id`[i]" class="form-control form-textbox input-text" [(ngModel)]="media.editText" #editText pattern="/^(ftp|http|https):\/\/[^ ]+$/" style="width: 58%;margin-left: 1%;">
</div>
<div *ngIf="errorMsg[media._id] && (errorDiv[media._id])" style="color:red">
    {{errorMsg[media._id]}}
</div>
<p >
    <label *ngIf="media._id" (click)="change($event,media)">Change Link</label>
    <label *ngIf="!media._id" (click)="change($event,media)">Add Link</label>
</p>

Componenta:

public errorDiv = {};
public errorMsg = {};


    change(event: any, media) {
        if (media.editText.indexOf('https://www.youtube.com/embed') != -1) {
          this.errorMsg[media._id] = "";
          this.errorDiv[media._id] = "";
          if (!media._id) {
            var data:any = {
              pin_id: this.pin_id,
              media_type: "video",
              image_path: media.editText
            }
            this.ApiService
                .addLinkMedia(data)
                .subscribe(
                  media => {
                  })
          } else if(media._id) {
            var data:any = {
              media_id: media._id,
              image_path: media.editText
            }
            this.ApiService
                .addLinkMedia(data)
                .subscribe(
                  media => {
                    this.loadMedias()
                  }, error => {
                  })
          }
        } else {
          this.errorMsg[media._id] = "Please enter valid URL";
          this.errorDiv[media._id] = true;
        }
    }
Publicat 18/04/2018 la 06:17
sursa de către utilizator

voturi
1

Încercați obligatoriu mesajul de eroare pentru fiecare obiect media separat:

HTML:

<md-card-content>
  <ul class="listClass">
    <li *ngFor="let media of videos; let i = index ">
      <div>
        <input type="text" name="`media`.`_id`[i]" id="`media`.`_id`[i]" class="form-control form-textbox input-text" [(ngModel)]="media.editText" #editText pattern="/^(ftp|http|https):\/\/[^ ]+$/" style="width: 58%;margin-left: 1%;">
      </div>
      <div *ngIf="media.errorMsg" style="color:red">
        `media`.`errorMsg`
      </div>
      <p class="inputimg" style="float: right;display: inline-block">
        <label *ngIf="media._id" class="img_change" (click)="change($event,media)" style="width: 100px;">Change Link</label>
        <label *ngIf="!media._id" class="img_change" (click)="changetext($event,media)" >Add Link</label>
      </p>
    </li>
  </ul>
</md-card-content>

TS:

    change(event: any, media) {
    if (media.editText.indexOf('https://www.youtube.com/embed') != -1) {
      media.errorMsg="";
      if (!media._id) {
        var data:any = {
          pin_id: this.pin_id,
          media_type: "video",
          image_path: media.editText
        } 
        this.ApiService
            .addLinkMedia(data)
            .subscribe(
              media => {
              })
      } else if(media._id) {
        var data:any = {
          media_id: media._id,
          image_path: media.editText
        } 
        this.ApiService
            .addLinkMedia(data)
            .subscribe(
              media => {
                this.loadMedias()
              }, error => {
              })
      }
    } else {
      media.errorMsg = "Please enter valid URL";
    }
}
Publicat 18/04/2018 la 06:25
sursa de către utilizator

voturi
0

Cel mai bine este să creați un validator personalizat verifica datele introduse de dvs., ați fost arătat în direcția cea bună, dar numai foarte pe scurt. Creați o nouă directivă și îi furnizează în modulul aplicației.

@Directive({
    selector: '[appValidURL]',
    providers: [{provide: NG_VALIDATORS, useExisting: URLValidatorDirective, multi: true}]
})
export class URLValidatorDirective implements Validator {
    @Input('appValidURL') url: string;

    validate(control: AbstractControl): {[key: string]: any} {
        return this.url && this.url.startsWith("https://www.youtube.com/embed") ? {value: control.value}}: null;
    }
}

Apoi, în codul de intrare folosi ceva de genul asta.

<input type="text" name="videourl" id="videourl" class="form-control" required appValidURL [(ngModel)]="media.editText">
<div *ngIf="videourl.invalid && (videourl.dirty || videourl.touched)" class="alert alert-danger">
   <div *ngIf="videourl.errors.required">
        VideoURL is required!
   </div>
   <div *ngIf="videourl.errors.url">
       It must be an embedded youtube video!
   </div>
</div>

Niciodată nu am folosit-o așa, dar ar trebui să funcționeze, poate, cu unele tweeks minore.

Editare: Aceasta este numai pentru un câmp de intrare unic, poate încerca Tho să utilizați numele dvs. matrice în loc de „videourl“, nu sunt sigur cum asta funcționează.

Publicat 18/04/2018 la 06:19
sursa de către utilizator

voturi
0

A se vedea codul de mai jos si vei realiza greșeala ta. Trebuie să adăugați condiția ca este doar intrarea de curent.

   <div [ngClass]="{ 'has-error': form.submitted && !username.valid }">
          <label for="firstName">First Name</label>
          <input type="text" name="firstName" [(ngModel)]="model.firstName" #firstName="ngModel" required />
          <div *ngIf="form.submitted && !firstName.valid">First Name is required  </div>
  </div>
  <div [ngClass]="{ 'has-error': form.submitted && !username.valid }">
          <label for="lastName">Last Name</label>
          <input type="text" name="lastName" [(ngModel)]="model.lastName" #lastName="ngModel" required />
         <div *ngIf="form.submitted && !lastName.valid" >Last Name is required</div>
  </div>
Publicat 18/04/2018 la 05:55
sursa de către utilizator

voturi
0

Puteți face soething așa. Fără a face nimic în ts fișier. Puteți valida și afișa mesaje de validare folosind doar controalele formular.

<input id="name" name="name" class="form-control"
       required minlength="4" appForbiddenName="bob"
       [(ngModel)]="hero.name" #name="ngModel" >

<div *ngIf="name.invalid && (name.dirty || name.touched)"
     class="alert alert-danger">

  <div *ngIf="name.errors.required">
    Name is required.
  </div>
  <div *ngIf="name.errors.minlength">
    Name must be at least 4 characters long.
  </div>
  <div *ngIf="name.errors.forbiddenName">
    Name cannot be Bob.
  </div>

</div>

Luate de la unghiular doc oficial

Publicat 18/04/2018 la 05:46
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more