У меня есть форма в Angular, в которой есть две кнопки-теги. Одна кнопка отправляет форму на ng-click
. Другая кнопка предназначена исключительно для навигации ng-click
. Однако, когда нажимается эта вторая кнопка, AngularJS вызывает обновление страницы, которое вызывает 404. Я сбросил точку останова в функции, и она вызывает мою функцию. Если я сделаю любое из следующего, он остановится:
- Если я удаляю
ng-click
, кнопка не вызывает обновления страницы. - Если я закомментирую код в функции, это не приведет к обновлению страницы.
- Если я поменяю тег кнопки на тег привязки (
<a>
) с помощьюhref=""
, то это не вызовет обновления.
Последнее кажется самым простым решением, но почему AngularJS даже выполняет какой-либо код после моей функции, который вызывает перезагрузку страницы? Похоже, ошибка.
Вот форма:
<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>
Вот метод контроллера:
$scope.showChangePassword = function() {
$scope.selectedLink = "changePassword";
};
javascript
angularjs
chubbsondubs
источник
источник
Ответы:
Если вы посмотрите на спецификацию W3C , вам может показаться очевидной попытка пометить элементы кнопок,
type='button'
когда вы не хотите, чтобы они отправлялись.Особо следует отметить, где говорится
источник
$event.preventDefault()
, что помогло в моем случае. Но у меня нет объяснения, почему: - \Вы можете попытаться предотвратить обработчик по умолчанию:
HTML:
ЯШ:
источник
Вы должны объявить атрибут
ng-submit={expression}
в вашем<form>
теге.Из документов ngSubmit http://docs.angularjs.org/api/ng.directive:ngSubmit
источник
Я использую директиву для предотвращения поведения по умолчанию:
И тогда, в HTML:
Эта директива также может использоваться со
<a>
всеми другими тегамиисточник
<form>
тегу и, следовательно, вы не можете использоватьng-submit
директиву.Вы можете сохранить
<button type="submit">
, но должен удалить атрибутaction=""
из<form>
.источник
Интересно, почему никто не предложил самое простое решение:
A
<whatever ng-form>
делает ИМХО лучшую работу, и без HTML-формы сам браузер ничего не отправит. Что является правильным поведением при использовании угловых.источник
ng-form=someForm
, вы получаете,$scope.someForm
и у него есть$valid
поле. Так что я получаю все, что мне нужно<button ng-disabled="!someForm.$valid">
.Добавьте действие в вашу форму.
<form action="#">
источник
Этот ответ не может быть напрямую связан с вопросом. Это только для случая, когда вы отправляете форму, используя сценарии.
Согласно коду ng-submit
Добавляет слушатель события отправки в форму. Но обработчик события submit не будет вызываться, когда submit инициируется вызовом form.submit (). В этом случае ng-submit не будет препятствовать действию по умолчанию, вы должны сами вызвать protectDefault в обработчике ng-submit;
См. Форма, отправленная с использованием submit () по ссылке, не может быть перехвачена обработчиком onsubmit
источник
Первая кнопка отправляет форму, а вторая нет
источник
Просто добавьте
FormsModule
вimports
массивapp.module.ts
файл и добавьтеimport { FormsModule } from '@angular/forms';
в начало этого файла ... это будет работать.источник