2017-12-12 1 views
0

Ich versuche, booleschen Wert in FormControl programmgesteuert festzulegen. Aber das markiert die Form als schmutzig. Going durch Angular docs "programmatischen Änderungen an Wert einer Kontrolle wird es schmutzig nicht markieren" https://angular.io/api/forms/AbstractControl#pristineEinstellung von FormControl in Angular 2 mit booleschem Wert 'true' programmgesteuert ist Formular als schmutzig markiert

Code:

this.formGroup.get(ruleOutput.attributeKey).setValue(JSONUtils.parseJSON(ruleOutput.attributeValue)) 

FÜR FYI, JSONParser-Code (Denkt nicht, einen Fehler hier):

public static parseJSON(input : any) : any{ 
    try{ 
     return JSON.parse(input); 
    }catch(Error){ 
     console.log("Inside JSON Utils: Error while parsing input JSON :"); 
     console.log(input); 
     console.log(Error.toString()); 
     console.log("Return Empty JSON"); 
     return JSON.parse("{}"); 
    } 
} 

Punkt ist nach dem Festlegen des Werts, Formular wird als schmutzig markiert.

Bitte helfen Sie mir bei der Ursache zu bekommen.

+0

if (ruleDataList && ruleDataList.length> 0) { ruleDataList [0] .ruleOutputList.forEach ( ruleOutput => { if (DisplayUtils.isKeyDisplayable (ruleOutput.attributeKey, "*")) { this.formGroup .get (ruleOutput.attributeKey) .setValue (JSONUtils.parseJSON (ruleOutput.attributeValue)); this.formGroup.get (ruleOutput.attributeKey) .markAsPristine; } } ) this.ruleDataAlreadyExists = true; } –

+0

Bitte erstellen Sie eine Demo dafür, ich sehe nicht, warum dies passieren sollte. – Alex

Antwort

1

Dies gilt nur für getters, nicht setters. Wenn Sie an der Quelle-Code von setValue betrachten, werden Sie sehen, dass es die Validierung als auch tut und deshalb markiert die Steuerung als schmutzig, da es geändert wurde:

https://github.com/angular/angular/blob/5.1.0/packages/forms/src/model.ts#L744

Was Sie tun können, ist vielleicht , legen Sie die Formularwerte fest und rufen Sie dann myFrom.markAsPristine().

+0

Ja, vorerst habe ich markAsPristine() explizit hinzugefügt. Eine andere Sache ist, dass es nur für 'Boolesche', nicht andere Datentypen passiert. –

Verwandte Themen