유형 'AbstractControl' Angular 4에 속성 '컨트롤'이 없습니다.
Angular 4에서 네스트된 반응 형태를 시도하고 있습니다.정상적으로 동작하고 있습니다만, AOT를 구축하려고 하면 에러가 발생합니다.
'AbstractControl' 유형에 'controls'가 없습니다.
나는 구글을 검색해서 몇 가지 시도를 해봤지만 운이 없었다.누가 이 문제를 어떻게 해결해야 하는지 말해줄 수 있나요?
<div [formGroup]="myForm">
<div formArrayName="addresses">
<div *ngFor="let address of myForm.get('addresses').controls; let i=index"
class="panel panel-default">
<span *ngIf="myForm.get('addresses').length > 1"
(click)="removeAddress(i)">Remove</span>
<div [formGroupName]="i">
<mat-form-field>
<input matInput formControlName="city" placeholder="city" value="">
</mat-form-field>
</div>
</div>
</div>
<a (click)="addAddress()" style="cursor: default"> Add +</a>
</div>
아래 스크립트 코드 입력
constructor(private _fb: FormBuilder) {
}
ngOnInit() {
this.myForm = this._fb.group({
addresses: this._fb.array([
this.initAddress(),
])
});
}
initAddress() {
return this._fb.group({
city: ['']
});
}
addAddress() {
const control = <FormArray>this.myForm.get('addresses');
control.push(this.initAddress());
}
removeAddress(i: number) {
const control = <FormArray>this.myForm.get('addresses');
control.removeAt(i);
}
@Günter Zöchbauer의 코멘트에 근거해, 우선 i가 변경되었습니다.
myForm.controls['addresses']
로.myForm.get('addresses')
html과 타이프스크립트 양쪽으로
그리고 @yuruzi 코멘트를 기반으로 합니다.
변경되었다.myForm.get('addresses').controls
로.myForm.get('addresses')['controls']
지금은 잘 되고 있어요.@gunter & yuruzi 감사합니다
그래도 쉽게 고칠 수 있어요.컨트롤 취득 로직을 컴포넌트 코드의 메서드에 아웃소싱합니다(.ts
파일):
getControls() {
return (this.recipeForm.get('controlName') as FormArray).controls;
}
템플릿에서 다음을 사용할 수 있습니다.
*ngFor="let ingredientCtrl of getControls(); let i = index"
이 조정은 TS가 작동하는 방식과 Angular가 템플릿을 구문 분석하기 때문에 필요합니다(TS를 이해하지 못합니다).
바꾸다myForm.get('addresses').controls
로.myForm.get('addresses').value
이 문제도 해결됩니다.
@sunny kashyap 솔루션의 업데이트로서 다음과 같이 쓰고 싶습니다.
getControls() {
return (this.recipeForm.get('controlName') as FormArray).controls;
}
검증 오류에 대해서는 다음을 사용하십시오.
<span *ngIf="f.YOUR_FORM_KEY.controls.YOUR_FORM_KEY.errors?.YOUR_FORM_VALIDATION">YOUR_FORM_KEY is YOUR_FORM_VALIDATION</span>
예:
<span *ngIf="f.name.controls.name.errors?.required">Name is required</span>
ts 파일
get f(): any {
return this.userForm.controls;
}
의 길이를 재다FormArray
, 심플하게 사용length
:
<span *ngIf="myForm.controls['addresses'].length > 1" (click)="removeAddress(i)">Remove</span>
도움이 되었으면 좋겠다
커스텀 인터페이스 사용 가능
// Define AbstractFormGroup
export interface AbstractFormGroup extends FormGroup {
controls: {
[key: string]: AbstractFormGroup & AbstractFormGroup[] & AbstractControl & FormGroup & FormArray,
}
}
// Usage example
class ... {
myForm: AbstractFormGroup
...
this.myForm = this.fb.group({...}) as AbstractFormGroup
}
언급URL : https://stackoverflow.com/questions/46926182/property-controls-does-not-exist-on-type-abstractcontrol-angular-4
'programing' 카테고리의 다른 글
WordPress - 메타 생성기 태그를 제거하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
---|---|
인증 없이 uri를 요구할 경우 spring security response unauthorized(http 401 코드)를 허용하는 방법 (0) | 2023.03.16 |
워드프레스로 모든 투고를 표시하는 URL은 무엇입니까? (0) | 2023.03.16 |
한 페이지 애플리케이션 - 부분 뷰를 기반으로 js 파일을 동적으로 로드합니다. (0) | 2023.03.16 |
Wordpress에서 메일을 활성화하려면 어떻게 해야 합니까? (0) | 2023.03.16 |