Angular2 Jika ngModel digunakan dalam tag formulir, atribut nama harus disetel atau formulir


216

Saya mendapatkan kesalahan ini dari Angular 2

core.umd.js: 5995 KECUALI: Tidak tertangkap (dalam janji): Kesalahan: Kesalahan pada app / model_exposure_currencies / model_exposure_currencies.component.html: 57: 18 disebabkan oleh: Jika ngModel digunakan dalam bentuk tag, salah satu atribut nama harus berupa: set atau kontrol formulir harus didefinisikan sebagai 'mandiri' di ngModelOptions.

      Example 1: <input [(ngModel)]="person.firstName" name="first">
      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">
<td *ngFor="let lag of ce.lags">
    <div class="form-group1">
        <input name="name" [(ngModel)]="lag.name" [ngModelOptions]="{standalone: true}"  class="form-control" pattern="[0-9]*(\.[0-9]+)?" required>
    </div>

</td>

Ini adalah bagaimana saya menggunakan tag formulir:

 <form #f="ngForm" (ngSubmit)="onSubmit()">

2
cosider memberikan salah satu jawaban sebagai jawaban yang benar
G. Stoynev

Jawaban:


419

Jika ngForm digunakan, semua bidang input yang [(ngModel)]=""harus memiliki nama atribut dengan nilai.

<input [(ngModel)]="firstname" name="something">


1
apakah atribut nama harus memiliki nilai unik?
Alexander Mills

2
Dari dokumentasi Angular 5 ( angular.io/guide/forms ): "Menentukan atribut nama adalah persyaratan saat menggunakan [(ngModel)] dalam kombinasi dengan formulir."
elshev

2
Berlaku untuk Angular 7 juga!
coderpc

2
Saya ingin menambahkan bahwa itu hanya akan berfungsi jika ngModel muncul lebih dulu dari namanya.
Ronald Abellano

55

Karena setiap pengembang memiliki kebiasaan yang sama, tidak membaca kesalahan lengkap, baca saja baris pertama dan mulailah mencari jawaban dari orang lain :) :) Saya juga salah satunya, itu sebabnya saya ada di sini:

Baca kesalahan, dengan jelas mengatakan:

Example 1: <input [(ngModel)]="person.firstName" name="first">
Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">

Apa lagi yang perlu kita pahami kesalahan ini?

Gunakan salah satu opsi, semuanya akan berjalan lancar.


25
Penjelasan tentang implikasi / efek dari masing-masing alternatif akan berguna - memilih salah satu dari dua alternatif tersebut sepertinya bukan ide yang bagus.
Michael

2
mencintaimu :)))))
Lola

1
Berikut penjelasan yang bagus untuk [ngModelOptions]="{standalone: true}: stackoverflow.com/a/38368261/3135317 . Dalam kasus saya, saya mendapat `ngModel yang ditakuti digunakan dalam tag formulir, baik atribut nama harus ...` kesalahan ketika saya memiliki `* ngFor * untuk array bersarang. Penjilidan modelnya baik-baik saja, templatnya terbuka. "Contoh 1" TIDAK BISA bekerja; "Contoh 2" sempurna.
FoggyDay

Jawaban ini membantu saya dua kali dalam minggu yang sama (ternyata tidak cocok untuk pertama kali);)
Jay Cummins

30

Kedua atribut tersebut diperlukan dan juga periksa kembali semua elemen bentuk memiliki atribut "nama". jika Anda menggunakan konsep form submit, sebaiknya gunakan tag div saja sebagai ganti elemen form.

<input [(ngModel)]="firstname" name="something">

30

Dalam kasus saya kesalahan terjadi karena di bawah ini dalam marka html satu baris lagi ada tanpa atribut nama .

<form id="form1" name="form1" #form="ngForm">
  <div class="form-group">
    <input id="input1" name="input1" [(ngModel)]="metaScript" />
    ... 
    <input id="input2" [(ngModel)]="metaScriptMessage"/>
  </div>
</form>

Tetapi browser masih melaporkan bahwa baris pertama memiliki kesalahan. Dan sulit untuk menemukan sumber kesalahan jika Anda memiliki elemen lain di antara keduanya. masukkan deskripsi gambar di sini


16

Ketika Anda melihat konsol dengan jelas. Ini akan memberi Anda dua contoh. Terapkan salah satunya.

<input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone:
   true}">

atau <input [(ngModel)]="person.firstName" name="first">


16

Saya perhatikan bahwa alat pengembang Chrome terkadang hanya menggarisbawahi elemen pertama dalam warna merah swaggly bahkan jika itu diatur dengan benar dengan sebuah nama. Ini melempar saya untuk sementara waktu.

Orang harus yakin untuk menambahkan nama ke setiap elemen pada formulir yang berisi ngModel terlepas dari mana yang digarisbawahi berlekuk-lekuk.


9

Cukup mudah untuk memperbaikinya.

Bagi saya, kami memiliki lebih dari satu input dalam formulir. Kita perlu mengisolasi input / jalur yang menyebabkan kesalahan dan cukup menambahkan nameatribut. Itu memperbaiki masalah bagi saya:

Sebelum:

<form class="example-form">

    <mat-form-field appearance="outline">

      <mat-select placeholder="Select your option" [(ngModel)]="sample.stat"> <!--HERE -->

          <mat-option *ngFor="let option of actions" [value]="option">{{option}</mat-option>
      </mat-select>
    </mat-form-field>

    <mat-form-field appearance="outline">
      <mat-label>Enter number</mat-label>

      <input id="myInput" type="text" placeholder="Enter number" aria-label="Number"
        matInput [formControl]="myFormControl" required [(ngModel)]="number">  <!--HERE -->

    </mat-form-field>

    <mat-checkbox [(ngModel)]="isRight">Check!</mat-checkbox> <!--HERE -->

  </form>

Setelah: saya baru saja menambahkan nameatribut untuk selectdan checkboxdan itu memperbaiki masalah. Sebagai berikut:

<mat-select placeholder="Select your option" name="mySelect" 
  [(ngModel)]="sample.stat"> <!--HERE: Observe the "name" attribute -->

<input id="myInput" type="text" placeholder="Enter number" aria-label="Number"
        matInput [formControl]="myFormControl" required [(ngModel)]="number">  <!--HERE -->

<mat-checkbox name="myCheck" [(ngModel)]="isRight">Check!</mat-checkbox> <!--HERE: Observe the "name" attribute -->

Seperti yang Anda lihat menambahkan nameatribut. Tidak perlu diberikan sama dengan ngModelnama Anda . Memberikan nameatribut saja akan memperbaiki masalah.


3

Anda perlu mengimpor {NgForm} dari @ angular / form di page.ts Anda;

Kode HTML:

<form #values="ngForm" (ngSubmit)="function(values)">
 ...
 <ion-input type="text" name="name" ngModel></ion-input>
 <ion-input type="text" name="mail" ngModel></ion-input>
 ...
</form>

Di Page.ts Anda, terapkan fungsi Anda untuk memanipulasi data formulir:

function(data) {console.log("Name: "data.value.name + " Mail: " + data.value.mail);}

3

Coba ini...

    <input type="text" class="form-control" name="name" placeholder="Name"
                  required minlength="4" #name="ngModel"
                  ngModel>
                  <div *ngIf="name.errors && (name.dirty || name.touched)">
                      <div [hidden]="!name.errors.required" class="alert alert-danger form-alert">
                          Please enter a name.
                      </div>
                      <div [hidden]="!name.errors.minlength" class="alert alert-danger form-alert">
                          Enter name greater than 4 characters.
                      </div>
                  </div>

3

Untuk semua orang yang tidak panik dengan pesan kesalahan itu sendiri, tetapi hanya googling untuk penjelasan mengapa contoh dari sini tidak bekerja (yaitu pemfilteran dinamis tidak terjadi ketika teks diketik ke dalam kolom input): itu tidak akan berfungsi sampai Anda akan menambahkan parameter nama di bidang input. Tidak ada yang menunjuk pada penjelasan mengapa pipa tidak bekerja, tetapi pesan kesalahan menunjuk ke topik ini dan memperbaikinya sesuai dengan jawaban yang diterima membuat filter dinamis berfungsi.



2

Agar dapat menampilkan informasi dalam bentuk yang Anda inginkan, Anda perlu memberikan input spesifik nama-nama yang menarik. Saya sarankan Anda memiliki:


<form #f="ngForm" (ngSubmit)="onSubmit(f)"> ...
<input **name="firstName" ngModel** placeholder="Enter your first name"> ...

2

Bagi saya, solusinya sangat sederhana. Saya mengubah <form>tag menjadi a <div>dan kesalahan hilang.


1
Ini karena Anda menghapus formulir, sehingga menghapus semua fitur yang disediakan formulir.
astro8891

@ astro8891 saya tidak perlu fitur
John Henckel

0
<select name="country" formControlName="country" id="country" 
       class="formcontrol form-control-element" [(ngModel)]="country">
   <option value="90">Turkey</option>
   <option value="1">USA</option>
   <option value="30">Greece</option>
</select>
name="country"
formControlName="country" 
[(ngModel)]="country" 

Itulah tiga hal yang perlu digunakan ngModel di dalam direktif formGroup.

Perhatikan bahwa nama yang sama harus digunakan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.