Saya memiliki formulir di Angular yang memiliki dua tag tombol di dalamnya. Satu tombol mengirimkan formulir ng-click
. Tombol lainnya murni untuk navigasi menggunakan ng-click
. Namun, ketika tombol kedua ini diklik, AngularJS menyebabkan refresh halaman yang memicu 404. Saya telah menjatuhkan breakpoint pada fungsi dan itu memicu fungsi saya. Jika saya melakukan salah satu dari yang berikut ini, itu akan berhenti:
- Jika saya menghapus
ng-click
, tombol tidak menyebabkan penyegaran halaman. - Jika saya berkomentar kode dalam fungsi, itu tidak menyebabkan penyegaran halaman.
- Jika saya mengubah tag tombol menjadi anchor tag (
<a>
) denganhref=""
, maka itu tidak menyebabkan penyegaran.
Yang terakhir sepertinya solusi yang paling sederhana, tetapi mengapa AngularJS bahkan menjalankan kode apa pun setelah fungsi saya yang menyebabkan halaman dimuat ulang? Sepertinya ada bug.
Ini formulirnya:
<form class="form-horizontal" name="myProfile" ng-switch-when="profile">
<fieldset>
<div class="control-group">
<label class="control-label" for="passwordButton">Password</label>
<div class="controls">
<button id="passwordButton" class="secondaryButton" ng-click="showChangePassword()">Change</button>
</div>
</div>
<div class="buttonBar">
<button id="saveProfileButton" class="primaryButton" ng-click="saveUser()">Save</button>
</div>
</fieldset>
</form>
Berikut adalah metode pengontrol:
$scope.showChangePassword = function() {
$scope.selectedLink = "changePassword";
};
javascript
angularjs
chubbsondubs
sumber
sumber
Jawaban:
Jika Anda melihat spesifikasi W3C , sepertinya hal yang jelas untuk dicoba adalah menandai elemen tombol
type='button'
Anda ketika Anda tidak ingin mereka mengirimkannya.Hal yang perlu diperhatikan secara khusus adalah di mana dikatakan
sumber
$event.preventDefault()
, yang membantu dalam kasus saya. Tapi saya tidak punya penjelasan mengapa: - \Anda dapat mencoba mencegah penangan default:
html:
js:
sumber
Anda harus mendeklarasikan atribut
ng-submit={expression}
dalam<form>
tag Anda .Dari dokumen ngSubmit http://docs.angularjs.org/api/ng.directive:ngSubmit
sumber
Saya menggunakan arahan untuk mencegah perilaku default:
Dan kemudian, dalam html:
Arahan ini juga dapat digunakan dengan
<a>
dan semua tag lainnyasumber
<form>
tag dan karenanya tidak dapat menggunakanng-submit
arahan.Anda dapat menyimpan
<button type="submit">
, tetapi harus menghapus atributaction=""
dari<form>
.sumber
Saya heran mengapa tidak ada yang mengusulkan solusi yang paling sederhana:
A
<whatever ng-form>
tidak IMHO pekerjaan yang lebih baik dan tanpa bentuk HTML, tidak ada yang dikirimkan oleh browser itu sendiri. Perilaku yang persis tepat saat menggunakan sudut.sumber
ng-form=someForm
, Anda dapatkan$scope.someForm
dan memiliki$valid
bidang. Jadi saya mendapatkan semua yang saya butuhkan<button ng-disabled="!someForm.$valid">
.Tambahkan tindakan ke formulir Anda.
<form action="#">
sumber
Jawaban ini mungkin tidak terkait langsung dengan pertanyaan. Ini hanya untuk kasus ketika Anda mengirimkan formulir menggunakan skrip.
Menurut ng-kirim kode
Itu menambahkan mengirimkan pendengar acara di formulir. Tetapi ajang event handler tidak akan dipanggil ketika ajukan diawali dengan memanggil form.submit (). Dalam hal ini, ng-kirim tidak akan mencegah tindakan default, Anda harus memanggil preventDefault sendiri di ng-submit handler;
Lihat Formulir yang dikirimkan menggunakan submit () dari tautan yang tidak dapat ditangkap oleh onsub handler
sumber
Tombol Pertama mengirimkan formulir dan yang kedua tidak
sumber
Cukup tambahkan
FormsModule
dalamimports
arrayapp.module.ts
file, dan tambahkanimport { FormsModule } from '@angular/forms';
di bagian atas file ini ... ini akan berfungsi.sumber