1

Ich teste eine einfache App. Das sind meine Dateien:Modell getriebene Formulare - Validierer Ausgabe

home.component.ts

import { Component } from '@angular/core'; 
import { FormGroup, FormControl, Validators, FormBuilder } from '@angular/forms'; 

@Component({ 
    selector: 'app-home', 
    templateUrl: 'home.component.html' 
}) 
export class HomeComponent { 
    form: FormGroup; 

    constructor(fb: FormBuilder) { 
     this.form = new FormGroup({ 
      'firstName': new FormControl('', Validators.required), 
      'password': new FormControl('', Validators.minLength(5)) 
     }); 
    } 
    onSubmit() { 
     console.log('model-based form submitted'); 
     console.log(this.form); 
    } 
} 

Und das ist die Template-Datei:

<section class="sample-app-content"> 
    <h1>Model-based Form Example:</h1> 
    <form [formGroup]="form" (ngSubmit)="onSubmit()"> 
     <div class="form-field"> 
      <label>First Name:</label> 
      <input type="text" formControlName="firstName"> 
     </div> 
    <div class="form-field"> 
     <label>Password:</label> 
     <input type="text" formControlName="password"> 
    </div> 
    <p> 
     <button type="submit" [disabled]="!form.valid">Submit</button> 
    </p> 
</form> 

Aber es ist nicht die Validators gut zu erkennen, denn wenn ich die firstname schreiben Es aktiviert den Submit-Button, wenn ich den Vornamen leer gebe, ändert sich die Eingabe nie in Rot.

Was mache ich falsch?

EDIT:

habe ich eine Demo hier

http://plnkr.co/edit/cs6N0n?p=preview

Antwort

3

Der Winkelprüfer setzt die ng-invalid CSS-Klasse, wenn die Überprüfung fehlschlägt. Sie haben jedoch ng-invalid nicht in Ihrem CSS definiert, so dass Sie keinen roten Rahmen erhalten.

Wenn Sie den Stil im CSS definieren funktioniert es:

.ng-invalid { 
    border-color: #ff0000; 
} 

nicht genau wissen, warum die minLength (5) Validator für das Passwort ein leeres Passwort ermöglicht. Entweder ist es ein kantiger Bug oder ein beabsichtigtes Verhalten und Sie müssen es mit dem erforderlichen Validator kombinieren.

+0

Also lassen Sie mich sehen, ob ich verstanden habe. Die Validierer können nur den gültigen Status des Formulars und nicht sein Verhalten ändern? Ich vermutete, dass es daran arbeitete. Also, wenn ich die Farben ändern oder Nachrichten anzeigen möchte, muss ich ng Direktiven hinzufügen? zB: '[class] =" _isvalidform? class-ok: class-notok "? – FacundoGFlores

+1

Nein, Sie müssen nicht, eckle fügt automatisch die' ng-invalid' Klasse hinzu und entfernt sie. Aber Sie müssen definieren, wie ng- Ungültig sollte gerendert werden Der Browser weiß standardmäßig nicht, dass dieses Ding existiert und sollte rot sein Und eckig bringt Standard css nicht mit sich selbst. – Matthias247

+1

Wenn Sie möchten, könnten Sie aber auch ähnliches Verhalten mit '[ngClass hinzufügen. notvalid] '="! form.valid "und definieren Sie stattdessen eine CSS für notvalid für ng-invalid. – Matthias247

Verwandte Themen