NgSubmit обновляет страницу в форме Angular 2
Я использую шаблон Angular2 для создания формы.
Когда я нажимаю кнопку, страницы обновляются.
Мои проверки работают нормально.
Как я могу остановить обновление страницы, когда пользователь нажимает кнопку?
Ниже приводится HTML, который я использую: -
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Add Employee</h3>
{{model | json}}
{{EName.errors | json}}
</div>
<div class="panel-body">
<form (ngSubmit)="onSubmit(empForm)" #empForm="ngForm" autocomplete="off" novalidate>
<div class="form-group">
<label for="EmployeeName">Employee Name</label>
<input type="text" class="form-control" id="EmployeeName" placeholder="Employee Name" required [(ngModel)]="model.EName" name="EName" #EName="ngModel" ngControl="Ename" #EName="EName" >
<div *ngIf="EName.touched && EName.errors" >
<div *ngIf="EName.errors.required" class="alert alert-danger">
Employee Name is required
</div>
</div>
</div>
<div class="form-group">
<label for="Age">Age</label>
<input type="text" class="form-control" id="Age" name="Age" placeholder="Age" [(ngModel)]="model.Age" ngControl="Age">
</div>
<div class="form-group">
<label for="Sex">Sex</label>
<div class="d-block">
<label class="radio-inline">
<input type="radio" name="sex" id="Male" value="0" (click)="model.Sex=$event.target.value"> Male
</label>
<label class="radio-inline">
<input type="radio" name="sex" id="Female" value="1" (click)="model.Sex=$event.target.value"> Female
</label>
</div>
</div>
<div class="form-group">
<label for="DOJ">Date of Joining</label>
<datepicker [(ngModel)]="model.DOJ" name="DOJ"></datepicker>
</div>
<div class="form-group">
<label for="Salary">Salary</label>
<input type="text" class="form-control" id="Salary" placeholder="Salary" [(ngModel)]="model.Salary" name="Salary">
</div>
<div class="form-group">
<label for="Designation">Designation</label>
<select id="Designation" name="designation" class="form-control" required [(ngModel)]="model.Designation" name="designation" #desig="ngForm" ngControl="Designation">
<option value="" selected>-- Select --</option>
<option *ngFor="let designation of designations" value="{{ designation.id }}">
{{designation.name}}
</option>
</select>
<div [hidden]="desig.valid || desig.pristine" class="alert alert-danger">
Please select a proper designation.
</div>
</div>
<button type="submit" class="btn btn-default" [disabled] ="!empForm.form.valid">Submit</button>
</form>
</div>
</div>
Ответы
Ответ 1
он обновляется, потому что в обработчике onSubmit
есть ошибка.
используйте event.PreventDefault();
в onSubmit
:
<form (ngSubmit)="onSubmit(empForm, $event)" ... >
public onSubmit(empForm: any, event: Event) {
event.preventDefault();
.... rest of your code
}
также вы можете просто проверить вывод консоли для отладки ошибки
... обязательно отметьте опцию preserve log
![сохранить журнал в devtools]()
Ответ 2
Убедитесь, что вы импортируете FormsModule из @angular/forms в модуль, содержащий ваш компонент, потому что без него ваша форма на отправке будет продолжать обновлять страницу и терпеть неудачу без входа в консоль.
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
/*make sure you import it here*/
import { FormsModule } from '@angular/forms';
@NgModule({
/*and add it to the imports array here*/
imports: [ FormsModule, CommonModule],
declarations: [ YourFormComponent ],
exports: [],
providers: [],
})
export class FeatureModule{ }
Ответ 3
Используйте вместо этого:
<button type="button"
Перезагрузка вызвана поведением браузера по умолчанию.
Ответ 4
Обновление 2019/2018 - Если это происходит с вами в какой-либо последней версии Angular (сейчас у меня 7), это не связано с <button type="submit"...>
, на самом деле это прекрасно Вы можете сохранить это. Вы также можете сохранить событие (submit)
в своем элементе <form>
.
Скорее всего, у вас есть ошибка в другом месте, из-за которой Angular не работает, как задумано.
- Убедитесь, что вы включили
FormsModule
или ReactiveFormsModule
если вы используете реактивные формы. - Убедитесь, что в вашей консоли нет ошибок (нажмите f12, затем перейдите к
Console
)
Angular не обновит страницу, если вы правильно создали экземпляр своей формы.
Ответ 5
Обновляет страницу в форме Angular 2:
Измените тип кнопки с "отправить" на кнопку, изменения не могут отражать.
Решение:
Форма модуля должна быть импортирована в ваш соответствующий модуль. Поскольку < form > без модуля формы, рассмотрите как HTML-форму. Так что форма получает обновление.
<form (submit)="onSubmit()">
<input type="text" name="firstName"/>
<button type="submit">submit</button>
</form>
Тип кнопки с подавать только в состоянии вызвать форму onsubmit()