Угловая - Отправить форму программно

Угловая - Отправить форму программно.

У меня есть группа форм в HTML, и я хочу, чтобы компонент отправил действие формы с полем электронной почты в методе post. Вместо обычной кнопки отправки.

Ниже testMethod вызывается с другой кнопки. В этом методе я хочу опубликовать testForm. Он должен быть опубликован старым школьным способом, поскольку он требует действия.

Это мой HTML:

  <form
    [formGroup]="testGroup"
    [action]='actionLink'
    method='POST'
    #testForm>
     <input name='Email' type='hidden' [value]='currentUserEmail'>
  </form>

Это попытка моего TS файла Component:

  @ViewChild('testForm') testFormElement;

  public currentUserEmail: string = '';
  public testGroup = this.formBuilder.group({
    Email: ''
  });


  public testMethod(): void {

      // Below: This currently doesnt seem to do anything.
      this.testFormElement.ngSubmit.emit();
  }

Ответ 1

Вы можете использовать ngNoForm с вашей формой, чтобы удалить обработку ngForm и добавить простой обработчик javascript.

вы можете использовать свой код следующим образом:

Html файл.

  <form ngNoForm
    [formGroup]="testGroup"
    [action]='actionLink'
    method='POST'
    #testForm>
     <input name='Email' type='hidden' [value]='currentUserEmail'>
  </form>

Ts File.

  @ViewChild('testForm') testFormElement;

  public currentUserEmail: string = '';
  public testGroup = this.formBuilder.group({
    Email: ''
  });


  public testMethod(): void {
      this.testFormElement.nativeElement.submit();
  }

Ответ 2

Я думаю, что вы должны получить ngForm в своем коде. Итак, перепишите ваш код следующим образом:

<form
[formGroup]="testGroup"
[action]='actionLink'
method='POST'
#testForm="ngForm" (ngSubmit)="testForm.form.valid ? yourSaveMethod() :showValidatinErrors()">
 <input name='Email' type='hidden' [value]='currentUserEmail'>

и в вашем файле TS:

'@ViewChild('testForm') testFormElement: NgForm;

public testMethod(): void {

  // Below: This works for me.
  this.testFormElement.ngSubmit.emit();
}
public yourSaveMethod(): void {

  // post your model here.

}

Ответ 3

import { Component, ViewChild } from '@angular/core';

@Component({
    template: '
        <form #testForm>
            <input name='Email' type='hidden'>
        </form>
    '
})
class MyComponent {
    @ViewChild('testForm') testFormEl;

    testMethod() {
        this.testFormEl.nativeElement.submit()
    }
}

Ответ 4

Относительно "Angular - отправить форму программно" Вот код, где форма представляет себя. Меня устраивает. Надеюсь, это поможет.

Component HTML:
    .
    .
    .  
            <form #myForm ngNoForm name="myForm" [action]="pdfServletUrl"          target="_blank" method="POST">
                 <button type="submit" [hidden]="'true'"></button>
            </form>
    .
    .
    .
    Component TypeScript:           
    .
    .
    .
    @ViewChild('myForm') myForm : ElementRef;
    .
    .
    .
    ngAfterViewInit() {
     this.myForm.nativeElement.submit();
    }
    .
    .
    .