[angular] mat-form-field는 MatFormFieldControl을 포함해야합니다.
우리는 회사에서 자체 양식 필드 구성 요소를 구축하려고합니다. 우리는 다음과 같이 머티리얼 디자인의 컴포넌트를 감싸려고합니다.
들:
<mat-form-field>
<ng-content></ng-content>
<mat-hint align="start"><strong>{{hint}}</strong> </mat-hint>
<mat-hint align="end">{{message.value.length}} / 256</mat-hint>
<mat-error>This field is required</mat-error>
</mat-form-field>
텍스트 상자 :
<field hint="hint">
<input matInput
[placeholder]="placeholder"
[value]="value"
(change)="onChange($event)"
(keydown)="onKeydown($event)"
(keyup)="onKeyup($event)"
(keypress)="onKeypress($event)">
</field>
용법:
<textbox value="test" hint="my hint"></textbox>
결과는 대략 다음과 같습니다.
<textbox placeholder="Personnummer/samordningsnummer" value="" ng-reflect-placeholder="Personnummer/samordningsnummer">
<field>
<mat-form-field class="mat-input-container mat-form-field>
<div class="mat-input-wrapper mat-form-field-wrapper">
<div class="mat-input-flex mat-form-field-flex">
<div class="mat-input-infix mat-form-field-infix">
<input _ngcontent-c4="" class="mat-input-element mat-form-field-autofill-control" matinput="" ng-reflect-placeholder="Personnummer/samordningsnummer" ng-reflect-value="" id="mat-input-2" placeholder="Personnummer/samordningsnummer" aria-invalid="false">
<span class="mat-input-placeholder-wrapper mat-form-field-placeholder-wrapper"></span>
</div>
</div>
<div class="mat-input-underline mat-form-field-underline">
<span class="mat-input-ripple mat-form-field-ripple"></span>
</div>
<div class="mat-input-subscript-wrapper mat-form-field-subscript-wrapper"></div>
</div>
</mat-form-field>
</field>
</textbox>
그러나 콘솔에 “mat-form-field에 MatFormFieldControl이 포함되어 있어야합니다”라는 메시지 가 나타납니다. 이것은 matInput-field를 직접 포함하지 않는 mat-form-field와 관련이 있다고 생각합니다. 그러나 그것은 그것을 포함하고 있습니다. 그것은 단지 ng-content 투영과 함께입니다.
여기에 기습이 있습니다 :
https://stackblitz.com/edit/angular-xpvwzf
답변
불행히도 mat-form-field 로의 콘텐츠 투영은 아직 지원되지 않습니다. 이에 대한 최신 뉴스를 얻으려면 다음 github 문제 를 추적하십시오 .
이제 유일한 해결책은 콘텐츠를 mat-form-field 구성 요소에 직접 배치하거나 MatFormFieldControl 클래스를 구현하여 사용자 지정 양식 필드 구성 요소를 만드는 것입니다.
답변
나는이 문제가 있었다. MatFormFieldModule
메인 모듈에서 가져 왔지만 다음과 같이 배열 에 추가 MatInputModule
하는 것을 잊었습니다 imports
.
import { MatFormFieldModule, MatInputModule } from '@angular/material';
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
도움이 되길 바랍니다.
자세한 내용은 여기를 참조하십시오 .
답변
해결 방법 1-MatInputModule 가져 오기
MatInputModule
모듈 내부로 가져 오기app.module.ts
앵귤러 9+
import { MatInputModule } from '@angular/material/input';
각도 9 이하
import { MatInputModule } from '@angular/material';
@NgModule({
imports: [
// .......
MatInputModule
// .......
]
})
export class AppModule { }
해결 방법 2-철자 실수
추가해야하며 matInput
대소 문자를 구분합니다.
<input matInput type="text" />
답변
공식 문서에서 인용 여기 :
오류 : mat-form-field는 MatFormFieldControl을 포함해야합니다
양식 필드에 양식 필드 컨트롤을 추가하지 않은 경우이 오류가 발생합니다. 양식 필드에 기본 또는 요소가 포함 된 경우 matInput 지시문을 추가하고 MatInputModule을 가져 왔는지 확인하십시오. 양식 필드 컨트롤 역할을 할 수있는 다른 구성 요소에는, 및 사용자가 만든 사용자 지정 양식 필드 컨트롤이 있습니다.
답변
당신이 가지고있는 경우에도 발생할 수 매트 형태의 필드 내에서 적절한 입력을 하지만, 그것은을 가지고 ngIf
그 위에. 예 :
<mat-form-field>
<mat-chip-list *ngIf="!_dataLoading">
<!-- other content here -->
</mat-chip-list>
</mat-form-field>
필자의 경우 mat-chip-list
데이터가로드 된 후에 만 ”표시”되어야합니다. 그러나 유효성 검사가 수행되고 mat-form-field
와 불평
mat-form-field는 MatFormFieldControl을 포함해야합니다.
그것을 고치려면 컨트롤이 있어야하므로 다음을 사용했습니다 [hidden]
.
<mat-form-field>
<mat-chip-list [hidden]="_dataLoading">
<!-- other content here -->
</mat-chip-list>
</mat-form-field>
또 다른 해결책은에 의해 제안 Mosta
ngIf 이동 *에 대한 : mat-form-field
:
<mat-form-field *ngIf="!_dataLoading">
<mat-chip-list >
<!-- other content here -->
</mat-chip-list>
</mat-form-field>
답변
import {MatInputModule} from '@angular/material/input';
@NgModule({
imports: [
MatInputModule
],
exports: [
MatInputModule
]
})
답변
이것이 간단 할 수 있는지 확실하지 않지만 동일한 문제가 발생하여 입력 필드에서 “mat-input”을 “matInput”으로 변경하면 문제가 해결되었습니다. 귀하의 경우 “matinput”이 표시되고 앱에서 동일한 오류가 발생합니다.
<input _ngcontent-c4="" class="mat-input-element mat-form-field-autofill-control" matinput="" ng-reflect-placeholder="Personnummer/samordningsnummer" ng-reflect-value="" id="mat-input-2" placeholder="Personnummer/samordningsnummer" aria-invalid="false">
“matinput”
“matInput”