Попытка сбросить форму при нажатии кнопки в angular

Я создаю базовое приложение регистрации пользователя с базовыми учетными данными. Я пытаюсь сбросить форму, когда нажимаю кнопку отмены. Однако я не могу этого сделать. Я написал функцию сброса, но почему-то она не вызывается. Не могу понять, что не так. Пожалуйста, помогите. Заранее спасибо

Мой код ТС:

 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>

попробуйте this.addForm.reset(); - вы пропустили скобки

porgo 11.04.2019 13:10

@porgo добавил скобки, все еще не могу сбросить.

rock11 11.04.2019 13:12

попробуйте добавить console.info() внутри resetForm() и проверьте, запускается ли он при нажатии кнопки

porgo 11.04.2019 13:15

@rock11 Попробуйте указать type=reset для кнопки отмены.

dileepkumar jami 11.04.2019 13:19
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
4
3 541
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Он должен быть со скобками () внутри метода Сброс форма(), как показано ниже:

this.addForm.reset();

ОБНОВЛЕННЫЙ ОТВЕТ:

Кроме того, попробуйте поставить type=reset для кнопки отмены, как показано ниже.

<button mat-raised-button type=reset (click)= 'resetForm()' color = "primary">Cancel</button>

Привет, я обновил вопрос со скобками. Я все еще не могу сбросить форму.

rock11 11.04.2019 13:12

@rock11 Попробуйте указать type=reset для кнопки отмены.

dileepkumar jami 11.04.2019 13:14

Сброс должен быть функцией

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>

Это должно работать!!

Другие вопросы по теме