Angular 형식과 지시문을 사용한 약간의 트릭 🃏
7201 단어 formstypescriptwebdevangular
우리의 경우 이 양식은 다단계 절차에서 사용되며 절차의 각 단계에서 양식이 더 제한적입니다. 보관할 수 있습니까DRY? 우리는이 문제가 있었고 다음 솔루션을 생각해 냈습니다.
양식
예를 들어 간단한 형식을 취해보자. 이름, 연락처 정보, 알레르기가 있는 사람이 있습니다.
처음에는 이름만 필요합니다. 나중에 우리는 그 사람의 나머지 정보를 요구할 것입니다.
@Component({
selector: 'person',
template: `
<div [formGroup]="form">
<div>
<label>Name</label>
<input type="text" formControlName="name" />
</div>
<div>
<label>Contact info</label>
<input type="text" formControlName="contactInfo" />
</div>
<div>
<label>Allergies</label>
<input type="text" formControlName="allergies" />
</div>
<strong>{{ form.valid ? 'valid' : 'invalid' }}</strong>
</div>
`,
})
export class PersonComponent {
form = this.formBuilder.group({
name: ['', Validators.required],
contactInfo: [''],
allergies: [''],
})
constructor(private formBuilder: FormBuilder) {}
}
기본적으로 사람의 이름을 필수 필드로 만듭니다.
지시문
Angular 지시문을 사용하여 구성 요소의 인스턴스를 주입하여 양식에 액세스할 수 있습니다. 우리의 경우 양식의 유효성 검사를 변경하고 더 많은 필드가 필요합니다.
@Directive({
selector: 'person[stage-one]',
})
export class StageOneDirective {
constructor(host: PersonComponent) {
host.form.get('contactInfo').setValidators([Validators.required])
}
}
지시문에
PersonComponent
가 주입되도록 하려면 지시문을 person 형식에 맞게 만들어야 합니다. 이를 수행하기 위해 구성 요소의 선택기를 접두사로 사용하고 지시문 이름을 추가할 수 있습니다. person[stage-one]
. 이렇게 하면 지시문이 사람 구성 요소의 속성으로 추가된 경우에만 지시문을 사용할 수 있습니다.person 구성 요소의 양식이 public으로 설정되어 있기 때문에 지시문 내에서 양식에 액세스할 수 있습니다. 양식에 액세스할 수 있는 경우 양식 필드와 해당 유효성 검사기에 액세스할 수 있습니다.
동일한 접근 방식을 사용하여 더 엄격한 유효성 검사를 생성할 수 있습니다.
@Directive({
selector: 'person[stage-two]',
})
export class StageTwoDirective {
constructor(host: PersonComponent) {
host.form.get('contactInfo').setValidators([Validators.required])
host.form.get('allergies').setValidators([Validators.required])
}
}
용법
이 작은 예제를 완성하기 위해 이것은 다른 구성 요소의 지시문과 함께 또는 없이 person 구성 요소를 사용하는 방법입니다.
<!-- Only the name is required -->
<person></person>
<!-- The name and the contactInfo are required -->
<person stage-one></person>
<!-- All fields are required -->
<person stage-two></person>
I find this a clean solution in combination with Control Value Accessors, as discussed in Working with Angular forms in an enterprise environment.
다음blitz에서 이 예제를 가지고 놀아보세요.
Reference
이 문제에 관하여(Angular 형식과 지시문을 사용한 약간의 트릭 🃏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/angular/a-little-trick-with-angular-forms-and-directives-2mep텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)