2016-06-16 3 views
0

Ich frage mich, wie kann ich Validierung auf einem Feld dynamisch ändern. Ich habe Kontrollgruppe, die 5 Felder hat. Dazu möchte ich einen benutzerdefinierten Validator für diese Kontrollgruppe verwenden, um zu überprüfen, ob einer der Eingänge nicht leer ist. Wenn einige davon leer sind, möchte ich die Validierung aller Felder innerhalb dieser Kontrollgruppe als erforderlich festlegen.Wie kann die Validierung eines Controls nach dem Start geändert werden?

Dazu muss ich die Validierung jedes einzelnen Steuerelements dynamisch ändern, nachdem ich überprüft habe, ob einer der Eingänge leer ist. Ich habe den ersten Teil - aber ich kann immer noch nicht herausfinden, wie man die Validierung einer Kontrolle ändern kann, nachdem sie initiiert wurde. Irgendwelche Ideen?

Was ich im Moment tue, ich bin auf der Gruppe wie folgt ein Validator setzen:

this._formBuilder.group({....}, {validator: customValidator}) 

Antwort

1

Sie können einen benutzerdefinierten Validator verwenden, das Verhalten auf einem Wert in Abhängigkeit ändert

class MyComponent { 
    constructor(fb:FormBuilder) { 
    this.form = fb.group({ 
     c1: ['', (c) => this.myValidator(c)], 
     ... 
    }); 
    } 

    someState = true; 

    myValidator(c:Control) { 
    if(this.someState && control.value ....) { 
    } 
    } 
} 

Auf diese Weise kann der Validator beispielsweise auf den Status der aktuellen Komponente zugreifen. Sie können den Validator auch in eine andere Klasse verschieben und die Methodenreferenz dieser Klasse an den validator-Parameter übergeben und die Eigenschaften dieser Klasse aktualisieren, um das Verhalten des Validators zu ändern.

class MyValidator { 
    someState = true; 

    validate(c:Control) { 
    if(this.someState && control.value ....) { 
    } 
    } 
} 

class MyComponent { 
    myValidator = new MyValidator(); 

    constructor(fb:FormBuilder) { 
    this.form = fb.group({ 
     c1: ['', this.myValidator.validate.bind(this.myValidator)], 
     ... 
    }); 
    } 

    onSomeEvent() { 
    this.myValidator.someState = !this.myValidator.someState; 
    this.form.control.c1.updateValueAndValidity(); 
    } 
} 
+0

Das ist im Grunde, was ich tue, aber ich würde gerne wissen, wie ich die Validierung eines Steuerelements zur Laufzeit ändern kann. Ist das möglich? – uksz

+0

Sieht nicht so aus, als ob es unterstützt wird. Sie können möglicherweise ein Steuerelement entfernen und ein anderes Steuerelement hinzufügen, für das unterschiedliche Validatoren konfiguriert sind. –

+0

Was erwarten Sie von der Hinzufügung/Entfernung von Validatoren im Vergleich zu der Lösung in meiner Antwort? –

Verwandte Themen