Kami sedang mencoba membangun Komponen-bidang-bentuk kami sendiri di Perusahaan kami. Kami mencoba untuk membungkus Komponen desain bahan seperti ini:
bidang:
<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>
kotak teks:
<field hint="hint">
<input matInput
[placeholder]="placeholder"
[value]="value"
(change)="onChange($event)"
(keydown)="onKeydown($event)"
(keyup)="onKeyup($event)"
(keypress)="onKeypress($event)">
</field>
Pemakaian:
<textbox value="test" hint="my hint"></textbox>
Ini menghasilkan sekitar ini:
<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>
Tapi saya mendapatkan "mat-form-field harus mengandung MatFormFieldControl" di konsol. Saya kira ini ada hubungannya dengan mat-form-field tidak secara langsung mengandung matInput-field. Tapi itu berisi, hanya dengan proyeksi ng-content.
Berikut ini adalah blitz: https://stackblitz.com/edit/angular-xpvwzf
angular
angular-material2
Viktor Eriksson
sumber
sumber
Jawaban:
Sayangnya proyeksi konten ke bidang-mat-form belum didukung. Silakan lacak masalah github berikut untuk mendapatkan berita terbaru tentangnya.
Saat ini satu-satunya solusi bagi Anda adalah menempatkan konten Anda langsung ke komponen bidang bentuk mat atau menerapkan kelas MatFormFieldControl sehingga menciptakan komponen bidang bentuk kustom.
sumber
MatInputModule
kebutuhan akan diimpor memecahkan masalah saya. Karena ini adalah jawaban yang diterima, saya menambahkan tautan di sini, berharap itu akan menghemat waktu orang lain.<mat-form-field>
tag Anda harus memastikan Anda menambahkanmatInput
atribut dengan benar pada setiapinput
tag atau ataumatNativeControl
atribut pada setiap<select>
Saya punya masalah ini. Saya mengimpor
MatFormFieldModule
modul utama saya, tetapi lupa menambahkanMatInputModule
keimports
array, seperti:Semoga ini bisa membantu.
Info lebih lanjut di sini .
sumber
<mat-form-field>
tag Anda harus memastikan Anda menambahkanmatInput
atribut dengan benar pada setiapinput
tag atau ataumatNativeControl
atribut pada setiap<select>
tagimport { MatInputModule } from '@angular/material/input':
Solusi 1 - impor MatInputModule
impor
MatInputModule
modul dalam yaituapp.module.ts
Sudut 9+
Di Bawah Sudut 9
Solusi 2 - Kesalahan Ejaan
Pastikan untuk menambahkan
matInput
dan case-sensitive.sumber
Mengutip dari dokumentasi resmi di sini :
sumber
Ini juga bisa terjadi jika Anda memiliki input yang tepat di dalam bidang-bentuk-mat , tetapi ada
ngIf
di dalamnya. Misalnya:Dalam kasus saya,
mat-chip-list
seharusnya "muncul" hanya setelah datanya dimuat. Namun, validasi dilakukan danmat-form-field
dikeluhkanUntuk memperbaikinya, kontrol harus ada di sana, jadi saya telah menggunakan
[hidden]
:Solusi alternatif diusulkan oleh
Mosta
: move * ngIf untukmat-form-field
:sumber
sumber
Saya tidak yakin apakah ini bisa sesederhana ini tetapi saya memiliki masalah yang sama, mengubah "mat-input" menjadi "matInput" di bidang input menyelesaikan masalah. Dalam kasus Anda, saya melihat "matinput" dan itu menyebabkan aplikasi saya melempar kesalahan yang sama.
"matinput"
"matInput"
sumber
mdInput
kematInput
.matInput
bukanmat-input
.Jika ada yang terjebak dengan kesalahan ini setelah mencoba membuat sarang
<mat-checkbox>
, jadilah senang! Tidak berfungsi di dalam<mat-form-field>
tag.sumber
jika ada yang mencoba membuat sarang
<mat-radio-group>
di dalam<mat-form-field>
seperti di bawah ini, Anda akan mendapatkan kesalahan inihapus
<mat-form-field>
tag induksumber
mat-form-field
membuat saya pergi.<mat-form-field>
tidak mendukung grup radio di dalamnya? Saya mengalami masalah ini juga dan tidak berpikir untuk hanya menghapus tag bidang formulir tikar karena sepertinya tidak akan menjadi hal yang tepat untuk dilakukan karena begitu banyak bahan yang digunakan contoh bentuk UI<mat-form-field>
. Saya memiliki semua modul input bentuk materi untuk formulir, pilih dropdown dan grup radio yang ditentukan di app.module.ts saya seperti banyak referensi jawaban lainnya.Saya memiliki masalah ini juga, dan saya memiliki
<mat-select>
elemen dalam template saya, ketika saya mengimpor MatSelectModule ke Modul, itu berfungsi, itu tidak membuat ilmu pengetahuan, tetapi masih berharap itu dapat membantu Anda.sumber
Sayangnya saya tidak bisa begitu saja mengomentari beberapa jawaban yang sudah baik karena saya belum memiliki poin SO, namun, ada 3 modul utama yang perlu Anda pastikan Anda mengimpor ke modul induk komponen Anda, selain dari apa Anda harus mengimpor ke komponen Anda secara langsung. Saya ingin membagikannya secara singkat dan menyoroti apa yang mereka lakukan.
Dua yang pertama adalah untuk Bahan Sudut. Banyak orang yang baru mengenal Materi Angular akan secara naluriah menemukan salah satunya dan tidak menyadari bahwa membangun sebuah formulir membutuhkan keduanya.
Jadi apa perbedaan di antara mereka?
MatFormFieldModule mencakup semua jenis bidang formulir yang tersedia untuk Bahan Angular. Ini lebih merupakan modul tingkat tinggi untuk bidang formulir secara umum, sedangkan MatInputModule khusus untuk jenis bidang 'input', sebagai lawan dari kotak pilih, tombol radio, dll.
Item ketiga dalam daftar di atas adalah Modul Bentuk Reaktif Angular. Modul Bentuk Reaktif bertanggung jawab untuk satu ton cinta sudut di bawah tenda. Jika Anda akan bekerja dengan Angular, saya sangat menyarankan Anda meluangkan waktu membaca Angular Docs. Mereka memiliki semua jawaban Anda. Membangun aplikasi jarang TIDAK melibatkan formulir, dan lebih sering daripada tidak, aplikasi Anda akan melibatkan formulir reaktif. Untuk alasan itu, silakan luangkan waktu untuk membaca dua halaman ini.
Dokumen Sudut: Formulir Reaktif
Dokumen Sudut: Modul Formulir Reaktif
Dokumen pertama 'Formulir Reaktif' akan menjadi senjata Anda yang paling kuat saat Anda mulai, dan dokumen kedua akan menjadi senjata paling ampuh saat Anda melanjutkan ke aplikasi yang lebih canggih dari Formulir Reaktif Angular.
Ingat, ini perlu diimpor langsung ke modul komponen Anda, bukan komponen yang Anda gunakan. Jika saya ingat dengan benar, di Angular 2, kami mengimpor seluruh rangkaian modul Bahan Sudut dalam modul aplikasi utama kami, dan kemudian mengimpor apa kami membutuhkan setiap komponen kami secara langsung. Metode saat ini jauh lebih efisien IMO karena kami dijamin akan mengimpor seluruh rangkaian modul Bahan Sudut jika kami hanya menggunakan beberapa dari mereka.
Saya harap ini memberikan sedikit lebih banyak wawasan tentang bentuk bangunan dengan Bahan Angular.
sumber
Jika semua jawaban struktur / konfigurasi kode utama di atas tidak menyelesaikan masalah Anda, berikut ini satu hal lagi yang perlu diperiksa: pastikan Anda tidak membatalkan
<input>
tag Anda .Sebagai contoh, saya menerima
mat-form-field must contain a MatFormFieldControl
pesan kesalahan yang sama setelah secara tidak sengaja menempatkanrequired
atribut setelah slash yang menutup sendiri/
, yang secara efektif membatalkan saya<input/>
. Dengan kata lain, saya melakukan ini (lihat bagian akhir atribut tag input):salah :
benar :
Jika Anda membuat kesalahan itu atau sesuatu yang lain untuk membatalkan Anda
<input>
, maka Anda bisa mendapatkanmat-form-field must contain a MatFormFieldControl
kesalahan. Bagaimanapun, ini hanya satu hal lagi yang harus dicari ketika Anda sedang melakukan debug.sumber
Kesalahan yang sama dapat terjadi jika Anda memiliki slide tikar di dalam mat dari bidang sebagai satu-satunya elemen dalam kasus saya
Ini mungkin terjadi jika Anda memiliki beberapa atribut dalam
<mat-form-field>
solusi Simple untuk memindahkan toggle slide ke rootsumber
Anda dapat mencoba mengikuti panduan ini dan menerapkan / menyediakan MatFormFieldControl Anda sendiri
sumber
Saya tidak sengaja menghapus matInput direktif dari bidang input yang menyebabkan kesalahan yang sama.
misalnya.
kode tetap
sumber
MatRadioModule tidak akan berfungsi di dalam MatFormField. The docs mengatakan
sumber
Dalam kasus saya, salah satu kurung penutup saya untuk "onChanges ()" tidak ada pada elemen input dan karenanya elemen input tampaknya tidak dirender sama sekali:
sumber
Solusi parsial adalah membungkus bidang formulir materi dalam komponen khusus dan mengimplementasikan
ControlValueAccessor
antarmuka di atasnya. Selain proyeksi konten, efeknya hampir sama.Lihat contoh lengkap di Stackblitz.
Saya menggunakan
FormControl
( bentuk reaktif ) di dalamCustomInputComponent
tetapiFormGroup
atauFormArray
harus bekerja juga jika Anda memerlukan elemen bentuk yang lebih kompleks.app.component.html
custom-input.component.html
sumber
Anda telah melewatkan
matInput
arahan dalam tag input Anda.sumber
sumber
Anda dapat mengatur penampilan = "isi" di dalam tag mat-form-field Anda, itu berfungsi untuk saya
sumber
appearence = "fill"
yang dilakukan di siniSudut 9+ ... Bahan 9+
Saya perhatikan 3 kesalahan dapat memunculkan kesalahan yang sama:
sumber
Impor Modul MatInput yang baru diperbarui adalah:
Sesuai API Bahan Sudut
sumber
Dalam kasus saya, saya mengubah ini:
untuk ini:
Menambahkan arahan matInput ke tag input adalah apa yang memperbaiki kesalahan ini untuk saya.
sumber
Anda mungkin telah melewatkan impor MatInputModule
sumber
menggunakan penyedia di file component.ts
sumber
Catatan Beberapa waktu Terjadi kesalahan, ketika kami menggunakan tag "mat-form-field" di sekitar tombol kirim seperti:
Jadi jangan gunakan tag ini di sekitar tombol kirim
sumber
Saya memiliki masalah yang sama
Masalahnya sederhana
hanya Anda yang harus mengimpor dua modul ke proyek Anda
MatFormFieldModule MatInputModule
sumber
saya mendapatkan masalah yang sama karena elemen komentar sebagai berikut.
bidang formulir harus memiliki elemen! (mis. input, textarea, pilih, dll.)
sumber