ng-submit di AngularJS: Menangani Pengiriman Formulir dengan Contoh
⚡ Ringkasan Cerdas
ng-submit di AngularJS mengikat fungsi controller ke event submit formulir di browser, sehingga nilai yang dimasukkan diproses di dalam controller dan halaman tidak pernah dimuat ulang melalui POST default.
Petunjuk pengiriman AngularJS
The ng-kirim arahan di AngularJS digunakan untuk mengikat aplikasi ke acara pengiriman browser. Jadi dalam kasus AngularJS pada acara pengiriman, Anda dapat melakukan beberapa pemrosesan di dalam pengontrol itu sendiri dan kemudian menampilkan informasi yang diproses kepada pengguna.
Catatan versi: AngularJS 1.x keluar dari Dukungan Jangka Panjang pada 31 Desember 2021, dan tim pengembang framework tersebut mengkonfirmasi hal itu. Dukungan untuk AngularJS resmi berakhir. pada Januari 2022, jadi tidak ada rilis atau patch keamanan yang menyusul. Setiap langkah dan blok kode di bawah ini dipertahankan persis seperti yang tertulis, sebagai referensi historis. Pekerjaan baru termasuk dalam Angular modern, yang mengekspresikan ide yang sama seperti (ngSubmit) terikat pada FormGroup.
Cara Mengirim Formulir di AngularJS menggunakan ng-submit
Proses pengiriman informasi pada halaman web biasanya ditangani oleh event submit di browser web. Event ini biasanya digunakan untuk mengirimkan informasi yang mungkin telah dimasukkan pengguna pada halaman web ke server untuk diproses lebih lanjut seperti kredensial login, data formulir, dll. Pengiriman informasi dapat dilakukan melalui permintaan GET atau POST.
Mari kita ambil contoh pengiriman formulir Angular untuk melihat cara mengirimkan formulir di AngularJS.
Dalam contoh pengiriman formulir AngularJS, kami akan menyajikan kotak teks kepada pengguna tempat mereka dapat memasukkan topik yang ingin mereka pelajari. Akan ada tombol kirim di halaman, yang jika ditekan akan menambahkan topik ke daftar yang tidak berurutan.
Ilustrasi di bawah ini tracalur yang dimulai dari topik yang diketik di dalam kotak teks, melalui tombol Kirim, hingga item daftar yang ditambahkan di bawahnya.

Contoh Pengiriman Formulir AngularJS
Sekarang, kita akan melihat contoh pengiriman formulir AngularJS dari Controller menggunakan direktif ng-submit:
<!DOCTYPE html>
<html>
<head>
<meta chrset="UTF 8">
<title>Event Registration</title>
</head>
<body ng-app="sampleApp">
<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/bootstrap.css"></script>
<h1> Guru99 Global Event</h1>
<div ng-controller="AngularController">
<form ng-submit="Display()">
Enter which topic you would like to learn
<input type="text" ng-app="sampleApp" ng-model="Topic"><br>
<input type="submit" value="Submit"/>
<ul ng-repeat="topicname in AllTopic">
<li>{{topicname}}</li>
</ul>
</form>
</div>
<script>
var sampleApp = angular.module("sampleApp",[]);
sampleApp.controller("AngularController",function($scope) {
$scope.AllTopic=[];
$scope.Display = function () {
$scope.AllTopic.push($scope.Topic);
}
});
</script>
</body>
</html>
Code Penjelasan:
- Pertama, kita mendeklarasikan tag HTML formulir kita, yang akan menampung kontrol "kotak teks" dan "tombol kirim" seperti yang ditunjukkan pada contoh event pengiriman formulir Angular. Kemudian, kita menggunakan direktif AngularJS ng-submit untuk mengikat fungsi "Display()" ke formulir kita. Fungsi ini akan didefinisikan dalam controller kita dan akan dipanggil ketika formulir dikirim.
- Kami memiliki kontrol teks di mana pengguna akan memasukkan Topik yang ingin mereka pelajari. Ini akan terikat pada variabel bernama 'Topik' yang akan digunakan di pengontrol kami.
- Terdapat tombol submit normal di AngularJS yang akan diklik pengguna ketika sudah memasukkan topik yang diinginkan.
- Kami telah menggunakan ng-ulangi arahan untuk menampilkan item daftar topik yang dimasukkan pengguna. Direktif ng-repeat menelusuri setiap topik dalam larik 'AllTopic' dan menampilkan nama topik yang sesuai.
- Di dalam controller kita, kita mendeklarasikan variabel array bernama 'AllTopic.' Variabel ini akan digunakan untuk menyimpan semua topik yang dimasukkan oleh pengguna pada Langkah 2.
- Kami mendefinisikan kode untuk fungsi Display() kami yang akan dipanggil setiap kali pengguna mengklik tombol Kirim. Di sini kita menggunakan fungsi push array untuk menambahkan Topik yang dimasukkan oleh pengguna melalui variabel 'Topik' ke dalam array 'AllTopic.'
Jika kode contoh formulir AngularJS berhasil dijalankan, Output berikut akan ditampilkan saat Anda menjalankan kode di peramban.
Keluaran:
Untuk melihat kode yang berfungsi, pertama-tama, masukkan nama Topik seperti “Angular” seperti yang ditunjukkan di atas pada kotak teks lalu klik tombol Kirim.
- Setelah tombol kirim diklik, Anda akan melihat item yang dimasukkan dalam kotak teks ditambahkan ke daftar item.
- Hal ini dicapai dengan fungsi Display(), yang dipanggil ketika tombol kirim ditekan.
- Fungsi Display() menambahkan teks ke variabel array yang disebut 'AllTopic.' Dan direktif ng-repeat kami menelusuri setiap nilai dalam variabel array 'AllTopic' dan menampilkannya sebagai item daftar.
ng-submit vs ng-click: Mana yang Digunakan
Kedua Direktif AngularJS Dapat memanggil fungsi controller yang sama, namun mereka mendengarkan event browser yang berbeda. ng-submit duduk di atas <form> Tag ini bereaksi terhadap peristiwa submit, sehingga juga aktif ketika pengguna menekan Enter di dalam sebuah field. ng-click Terletak di atas sebuah tombol dan hanya bereaksi terhadap klik mouse atau aktivasi yang setara.
| Aspek | ng-kirim | ng-klik |
|---|---|---|
| Elemen tuan rumah | Tag formulir | Elemen apa pun yang dapat diklik |
| Acara yang didengarkan | kirim, termasuk tombol Enter | klik saja |
| Browser default mengirimkan data POST. | Dibatasi oleh arahan tersebut | Masih menampilkan gambar dari tombol kirim. |
| Akses ke formulir negara bagian | Membaca variabel $valid dan $invalid pada controller formulir. | Tidak memiliki konteks bentuk tersendiri. |
| Cocok secara alami | Menyerahkan data formulir ke pengontrol. | Tombol bilah alat, tautan, pemicu modal |
Dukungan keyboard biasanya menentukan pilihan. Sebuah bentuk yang terhubung dengan ng-click Secara otomatis mengabaikan tombol Enter, yang membuat pengguna frustrasi saat mengisi kotak login. Cadangan ng-click untuk tindakan yang bukan pengiriman formulir, seperti mengosongkan kolom atau membuka dialog.
Mengapa ng-submit Mencegah Pengiriman Data Default Browser?
Formulir HTML biasa bereaksi terhadap peristiwa pengiriman dengan menserialisasi kolom-kolomnya dan meminta browser untuk memuat halaman baru, yang kemudian akan membuang semua nilai yang tersimpan di dalamnya. $scope. itu ng-submit arahan tersebut mencegah hal itu terjadi: arahan tersebut memanggil preventDefault() untuk Anda, jadi ekspresi berjalan dan halaman saat ini tetap di tempatnya. Tidak $event argumen dan tidak diperlukan panggilan manual.
Penindasan tersebut memiliki satu syarat yang terdokumentasi. Menurut Kirim referensi, tindakan default hanya dicegah saat formulir tidak memuat action, data-action or x-action atribut. Tambahkan salah satu dari itu dan browser akan menavigasi seperti biasa setelah handler selesai, yang merupakan perilaku yang benar untuk formulir yang dirender server secara bertahap dan mengejutkan di tempat lain.
Karena arahan tersebut menelan objek peristiwa, bacalah nilai yang dikirimkan dari properti yang ng-model menulis ke dalam cakupan, atau meneruskannya secara eksplisit, seperti pada ng-submit="Display(Topic)".
Cara Memvalidasi Formulir Sebelum ng-submit Dijalankan
Contoh di atas menerima topik kosong, karena tidak ada yang memeriksa kotak teks terlebih dahulu. AngularJS membangun pengontrol formulir untuk setiap formulir bernama, dan pengontrol tersebut mengekspos flag yang dibutuhkan untuk mengatur pengiriman. Tambahkan novalidate jadi browser membiarkan gelembung HTML5-nya sendiri dimatikan dan AngularJS validasi formulir mengambil alih.
- Berikan formulir tersebut
nameAngularJS mempublikasikan controller dengan nama tersebut pada lingkungan sekitarnya. pengawas cakupan. - Add
novalidateke tag formulir sehingga validasi bawaan browser tidak mengganggu. - Tandai kolom-kolom tersebut, menggunakan
required,ng-minlength,ng-maxlengthorng-pattern. - Lindungi petugas penanganan dengan
$valid, dan teruskan pengontrol formulir agar fungsi tersebut dapat memeriksa setiap kolom secara individual. - Nonaktifkan tombol dengan
ng-disabledmenunjuk ke$invalidyang memberikan umpan balik visual secara langsung.
<form name="topicForm" ng-submit="topicForm.$valid && Display(topicForm)" novalidate> <input type="text" name="Topic" ng-model="Topic" required> <input type="submit" value="Submit" ng-disabled="topicForm.$invalid"> </form>
Dua kesalahan menjadi penyebab sebagian besar masalah yang dilaporkan terkait pola ini:
- Double pengajuan. Mengikat
ng-clickpada tombol kirim saatng-submitJika dijalankan pada formulir, handler akan dijalankan dua kali, sekali untuk setiap kejadian. Referensi resmi memperingatkan agar tidak menggabungkan kedua handler tersebut, jadi pilihlah salah satu. - Pengajuan yang tidak terduga. Tombol apa pun di dalam formulir tanpa
type="button"Memicu peristiwa pengiriman. Tandai tombol batal dan atur ulang secara eksplisit, jika tidak, tombol tersebut juga akan memicu penangan.
Menjaga $valid Ini adalah fitur kemudahan, bukan kontrol keamanan. Nilai-nilai tersebut masih harus divalidasi ulang di server sebelum disimpan.


