Я создаю базовое приложение регистрации пользователя с базовыми учетными данными. Я пытаюсь сбросить форму, когда нажимаю кнопку отмены. Однако я не могу этого сделать. Я написал функцию сброса, но почему-то она не вызывается. Не могу понять, что не так. Пожалуйста, помогите. Заранее спасибо
Мой код ТС:
ngOnInit()
{
this.addForm = this.formBuilder.group({
id: [],
userName: ['', Validators.required],
password:new FormControl( '',[ Validators.required]),
passwordAgain: new FormControl('',[ Validators.required]),
userRole:['',Validators.required],
},{ validator: RepeatPasswordValidator });
}
onSubmit() {
if (this.addForm.valid)
{
this.userService.createUser(this.addForm.value)
.subscribe( data => {
//this.router.navigate(['adduser']);
});
this.snackBar.open("message", "action", {
duration: 2000,
});
alert("User created");
}
window.location.reload();
}
changeClient(value) {
}
resetForm()
{
this.addForm.reset();
}
Вот мой шаблон:
<div style = "height: 100vh" fxLayout = "column" fxLayoutAlign = "center center" >
<mat-toolbar>
<span>Registration</span>
</mat-toolbar>
<mat-card>
<mat-card-content>
<form [formGroup] = "addForm" class = "login-form" (ngSubmit) = "onSubmit()">
<div class = "form-group">
<mat-form-field class = "example-full-width">
<input matInput type = "text" formControlName = "userName" placeholder = "userName" name = "userName" class = "form-control" id = "userName">
</mat-form-field>
</div>
<div class = "form-group">
<mat-form-field class = "example-full-width">
<input matInput type = "password" formControlName = "password" placeholder = "Password" name = "password" class = "form-control" id = "password">
<mat-error *ngIf = "addForm.controls.password.hasError('required')" >Passwords can't be empty</mat-error>
</mat-form-field>
</div>
<div class = "form-field">
<mat-form-field>
<input matInput formControlName = "passwordAgain" placeholder = "Confirm the password" type = "password" [errorStateMatcher] = "passwordsMatcher">
<mat-error *ngIf = "addForm.hasError('passwordsNotEqual')" >Passwords are different. They should be equal!</mat-error>
</mat-form-field>
</div>
<mat-form-field>
<mat-select placeholder = "Roles" formControlName = "userRole" id = "userRole" (selectionChange) = "changeClient($event.value)" [(value)] = "selected">
<mat-option value = "Admin">Admin</mat-option>
</mat-select>
</mat-form-field>
<div class = "container" style = "margin: 12px" fxLayout = "row" fxLayoutAlign = "center center">
<button mat-raised-button color = "primary">Create</button>
<button mat-raised-button (click)= 'resetForm()' color = "primary">Cancel</button>
</div>
</form>
</mat-card-content>
</mat-card>
</div>
@porgo добавил скобки, все еще не могу сбросить.
попробуйте добавить console.info() внутри resetForm() и проверьте, запускается ли он при нажатии кнопки
@rock11 Попробуйте указать type=reset для кнопки отмены.





Он должен быть со скобками () внутри метода Сброс форма(), как показано ниже:
this.addForm.reset();
ОБНОВЛЕННЫЙ ОТВЕТ:
Кроме того, попробуйте поставить type=reset для кнопки отмены, как показано ниже.
<button mat-raised-button type=reset (click)= 'resetForm()' color = "primary">Cancel</button>
Привет, я обновил вопрос со скобками. Я все еще не могу сбросить форму.
@rock11 Попробуйте указать type=reset для кнопки отмены.
Сброс должен быть функцией
resetForm()
{
this.addForm.reset();
}
Может быть исправлено, если вы вызовете .reset(); вместо .reset;
См. здесь
если это не работает, как вы говорите, попробуйте console.info('вызванный reset') в вашей функции, если он вызван, вы также можете использовать patchvalue() для проверки. (сброс должен работать, хотя)
edit: вы также можете попробовать это из документов:
console.info(this.addForm.value); // {password: 'abcdef', passwordAgain: 'abcdef'}
this.addForm.reset({ password: '', passwordAgain: '' });
Если это не отображается, я хотел бы увидеть, как вы определили свою addForm
Кнопка представляет собой кнопку отправки (по умолчанию для всех браузеров, кроме Internet Explorer).
,
пожалуйста, установите тип на button
<button mat-raised-button type = "button" (click)= 'resetForm()' color = "primary">Cancel</button>
Нет необходимости в новом методе...
Просто установите тип кнопки на reset, как показано ниже,
<button mat-button color = "primary" type = "reset">Cancel</button>
Это должно работать!!
попробуйте
this.addForm.reset();- вы пропустили скобки