2017-12-12 4 views
0

プログラムでformControlにブール値を設定しようとしています。しかし、これは汚れた形をしています。 FYI FORformControlをブール値 'true'でプログラムで設定すると、フォームがダーティとマークされます

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

、JSONParserコード(ここではすべてのエラーを考えてはいけない):

角ドキュメントで行く、 https://angular.io/api/forms/AbstractControl#pristine

コードを「コントロールの値へのプログラムの変更は、汚い、それをマークしていないだろう」

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("{}"); 
    } 
} 

ポイントは値を設定した後、フォームがダーティーとしてマークされています。

この問題の根本的な原因を手伝ってください。

+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

このデモを作成してください。なぜこのようなことが起こるのかわかりません。 – Alex

答えて

1

gettersの場合にのみ該当し、settersでは該当しません。あなたがsetValueのソースコードを見れば、あなたは変更されているので、それは検証が同様したがって、ダーティとしてコントロールをマークしないことがわかります。

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

あなたは何ができるか多分ありますフォームの値を設定し、myFrom.markAsPristine()を呼び出します。

+0

はい、今のところ、明示的にmarkAsPristine()を追加しました。もう1つのことは、他のデータ型ではなく、 'ブール値'に対してのみ起こっているということです。 –

関連する問題