Угловая - Отправить форму программно
Угловая - Отправить форму программно.
У меня есть группа форм в 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();
}
.
.
.