각형으로 동적 폼을 만들려고합니다. 각 필드는 독립 구성 요소를 사용하며 유효성 검사기 목록을 포함하여 구성 데이터를 전달해야합니다 , 모든 사전 설정된 서버 측.폼 구성 요소에 미리 정의 된 유효성 검사기 배열 배열을 전달합니다.
나는 유효성 검사를 설정하는 데 어려움을 겪고 있습니다. 예를 들어,이 있습니다
ngOnInit(){
this.detailsForm = this.formBuilder.group({
exampleField: ['', Validators.compose([
Validators.required,
Validators.maxLength(32),
Validators.minLength(10)
])]
});
}
대신 '하드 코딩'이처럼 내 구성 요소에 유효성 검사기, 어떻게 구성 객체, 즉 뭔가 같은에서 그들을 설정할 수 있습니다
fieldData = {
exampleField: {
value: 'default value!',
validators: ['required', 'minLength:10']
}
}
편집 :
당신의 대답에 감사드립니다.
fieldData = {
exampleField: {
value: 'default value!',
validators: {
required: true,
minLength: 10,
pattern: /I_NEED_PATTERN_CHECK/,
minLength: null
}
}
}
그 다음에 당신은 약간 이런 일에 설정 객체를 수정하는 경우
import { Component, Input, Output, EventEmitter, Injector, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';
import { EntryService } from '../../_services/entry.service';
@Component({
selector: 'app-text-input',
templateUrl: './text-input.component.html',
styleUrls: ['./text-input.component.scss']
})
export class TextInputComponent implements OnInit {
@Input() id: number;
@Input() field_name: string;
@Input() label: string;
@Input() value: string;
public fieldData;
public detailsForm: FormGroup;
constructor(
private injector: Injector,
public _entryService: EntryService,
private formBuilder: FormBuilder,
) {
this.id = this.injector.get('id');
this.field_name = this.injector.get('field_name');
this.label = this.injector.get('label');
this.value = this.injector.get('value');
}
populateValidatorsList(valObj): any[] {
const list = [];
if (valObj['pattern']) { list.push(Validators.pattern(valObj['pattern'])); }
if (valObj['maxLength']) { list.push(Validators.maxLength(valObj['maxLength'])); }
if (valObj['minLength']) { list.push(Validators.minLength(valObj['minLength'])); }
if (valObj['required']) { list.push(Validators.required); }
return list;
}
ngOnInit(){
this.fieldData = {
exampleField: {
value: 'default value!',
validators: {
required: true,
minLength: 10,
pattern: /I_NEED_PATTERN_CHECK/,
maxLength: null
}
}
}
this.detailsForm = this.formBuilder.group({
exampleField: [this.fieldData['exampleField']['value'], this.populateValidatorsList()]
// exampleField: [this.fieldData['exampleField']['value'], [...this.populateValidatorsList()]] // BOTH OF THESE ALSO
// exampleField: [this.fieldData['exampleField']['value'], [this.populateValidatorsList()]] // PRODUCE THE SAME ERROR!
});
}
예상 된 형식으로 필드 데이터를 반환하는 라우팅을 작성하십시오. –