2017-12-12 5 views
0

formControl에서 프로그래밍 방식으로 부울 값을 설정하려고합니다. 그러나 이것은 형태가 더러운 것으로 표시합니다. 참고를위한formControl을 각도 값 2의 부울 값 '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

경우 (ruleDataList && ruleDataList.length> 0) { ruleDataList [0] .ruleOutputList.forEach ( ruleOutput => { 경우 (DisplayUtils.isKeyDisplayable (ruleOutput.attributeKey, "*")) { this.formGroup 갔지 (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()을 추가했습니다. 또 다른 것은 'boolean'에 대해서만 일어나고 다른 데이터 타입에는 일어나지 않는다는 것입니다. –