저는 이오닉/각도 2에서 모델 양식을 사용하려고했습니다. 조건부 유효성 검사를 수행 할 양식이 있습니다. 사용자는 필요한 6 개의 필드로 시작한 다음 '수동'및 '자동'처리 중에서 선택할 수 있습니다. '자동'을 선택하면 3 개의 입력/선택 항목이 렌더링됩니다. 이 3 개의 입력란은 필수 입력 사항이 아니어야합니다.Angular2 양식 모델을 사용하여 조건부 유효성 검사기를 사용하려고합니다. myForm.setValidators()를 사용하려고 시도했지만 작동하지 않는 것 같습니다
여기에 모델이 시작이다 :
this.myForm = this.formBuilder.group({
name: ['', Validators.compose([Validators.required, Validators.maxLength(45), Validators.minLength(2)])],
img: [''],
longDescription: ['', Validators.compose([Validators.required, Validators.maxLength(200)])],
shortDescription: ['', Validators.compose([Validators.required, Validators.maxLength(45)])],
processingType: [this.PROCESSING_TYPE.MANUAL],
discountType: ['' ],
discountRule: ['' ],
discountAmount: ['' ], // money, isNumbersOnly handled by custom validator
product: [''],
dateRuleDays: ['' ],
dateRuleTimeStart: ['' ],
dateRuleTimeEnd: ['' ],
startDate: ['', Validators.required],
expiryDate: ['', Validators.required ]
});
discountType, discountRule, discountAmount 내가 요구되기 전환하고자하는 3 개 필드는 다음과 같습니다. 여기
내가 무엇을 시도했다입니다 : setProcessingType의 FN가 호출되는마크 업 사용자가 '매뉴얼'을 사이 클릭하면
<!-- automatic or manual -->
<h4 margin-top text-center>Processing Type</h4>
<ion-row text-center>
<ion-col width-50>
<button class="width-80" color="primary" (click)="setProcessingType(PROCESSING_TYPE.MANUAL)" ion-button margin-top>{{ PROCESSING_TYPE.MANUAL }}</button>
</ion-col>
<ion-col width-50>
<button class="width-80" color="primary" (click)="setProcessingType(PROCESSING_TYPE.AUTOMATIC)" ion-button margin-top>{{ PROCESSING_TYPE.AUTOMATIC }}</button>
</ion-col>
</ion-row>
setProcessingType가 호출됩니다 (필요한 경우 i는 전체 페이지를 제공 할 수 있습니다) '자동'버튼. type : string은 processingType으로 설정할 새 값입니다.
setProcessingType(type: string): void {
this.myForm.patchValue({ // i welcome comments to correct this to 'setValue()' if needed
processingType: type
});
let formCtrls = ['discountType', 'discountRule', 'discountAmount', 'dateRuleDays', 'dateRuleTimeStart', 'dateRuleTimeEnd'];
let add = [Validators.required];
let empty = [];
formCtrls.forEach((key, index) => {
if (this.myForm.controls && this.myForm.controls[key]) {
if (type === this.PROCESSING_TYPE.AUTOMATIC) {
this.myForm.controls[key].setValidators([Validators.required]);
} else {
console.log('resetting validators...');
this.myForm.controls[key].setValidators([]);
console.log('errors on : ', key, this.myForm.controls[key].errors);
// this.myForm.controls[key].markAsUntouched(); // attempt 3928
// this.myForm.controls[key].markAsPristine() // attempt 3929
//this.myForm.controls.updateValueAndValidty(); // this throws an error
}
}
})
console.log('new form controls: ', this.myForm.controls);
}
내가 여기
this.myForm.get('processingType').valueChanges.subscribe(data => this.onProcessingTypeChanged(data));
위의 함수와 동일한 로직을 실행했던 나는 또한 'processingType'valueChanges에 가입 한은 값 내 로그에서 스크린 샷입니다 유효성 검사기를 추가하려고합니다.
시작 (수행 방법) ...
'수동'을 클릭 한 후에는 필수 항목입니까? 상기 의심 기준
난
this.myForm.controls.updateValueAndValidty();
또는 this.myForm.controls하는 열쇠 .updateValueAndValidity() 의심;
이 문제이지만 코드 내에서 주석을 달았으므로 두 함수 모두 '함수가 아닙니다'오류가 발생했습니다.
거의 모든 조건부 유효성 검사, 각도 2 양식 모델, 동적으로 유효성 검사기를 추가하는 등의 검색 기능을 제공합니다. 여기 나열된 링크가 너무 많습니다. 하하.
누군가가 문제를 진단하는 데 도움이되기를 바랍니다.
미리 감사드립니다.
는