#angular #angular-forms
#angular #angular-forms
Вопрос:
Я использую реактивную форму:
<form
#f="ngForm"
class="form"
[formGroup]="registerForm"
(ngSubmit)="onSubmit()"
novalidate
>
<div class="title-box-form">
<strong>Company Information</strong>
<div class="row">
<div class="form-group col-12">
<input
type="text"
class="form-control pink-border"
placeholder="Company Name"
formControlName="company_name"
/>
</div>
<span
class="text-danger"
*ngIf="
(registerForm.get('company_name').touched || submitted) amp;amp;
registerForm.get('company_name').errors?.required
"
>
company name is required
</span>
</div>
</div>
<div class="form-group col-12">
<input
type="text"
class="form-control pink-border"
placeholder="Email Address"
formControlName="email"
/>
</div>
<span
class="text-danger"
*ngIf="
(registerForm.get('email').touched || submitted) amp;amp;
registerForm.get('email').errors?.required
"
>
email name is required
</span>
<span
class="text-danger"
*ngIf="
registerForm.get('email').touched amp;amp;
registerForm.get('email').errors?.email
"
>
Enter a valid email address
</span>
<div class="modal-footer">
<input type="submit" class="btn-blue" />
<mat-spinner *ngIf="loading"></mat-spinner>
</div>
</form>
После отправки я хочу сбросить форму в функции отправки в файле component.ts, который я делаю
onSubmit() {
this.submitted = true;
if (this.registerForm.valid) {
this.loading=true;
let values = JSON.stringify(this.registerForm.value);
//this.registerForm.reset();
this.form.reset();
this.form.markAsPristine();
this.form.markAsUntouched();
this.form.updateValueAndValidity();
}
Я использую:
export class ManageCustomerComponent implements OnInit {
@ViewChild('f') form;
Я пробовал reserform()
, markAsPristine
но все они вызывают ошибки проверки после сброса формы, мне нужно сбросить форму после отправки, и если снова показать проверку после отправки формы, я импортирую это в верхней части моей страницы:
import { Component, OnInit, ViewChild , ChangeDetectorRef } from '@angular/core';
import {SidebarComponent} from '../sidebar/sidebar.component';
import {HeaderComponent} from '../header/header.component';
import { ModalDirective } from 'ngx-bootstrap/modal';
import { Validators, FormGroup, FormBuilder,FormControl,FormGroupDirective,NgForm } from '@angular/forms';
import {ServerService} from '../server.service';
import { Router } from '@angular/router';
import { HttpClient, HttpParams } from '@angular/common/http';
import Swal from "sweetalert2"
Ниже приведен полный TS-код компонента:
import { Component, OnInit, ViewChild, ChangeDetectorRef } from '@angular/core';
import { SidebarComponent } from '../sidebar/sidebar.component';
import { HeaderComponent } from '../header/header.component';
import { ModalDirective } from 'ngx-bootstrap/modal';
import {
Validators,
FormGroup,
FormBuilder,
FormControl,
FormGroupDirective,
NgForm,
} from '@angular/forms';
import { ServerService } from '../server.service';
import { Router } from '@angular/router';
import { HttpClient, HttpParams } from '@angular/common/http';
import Swal from 'sweetalert2';
declare var $: any;
@Component({
selector: 'app-manage-customer',
templateUrl: './manage-customer.component.html',
styleUrls: ['./manage-customer.component.css'],
})
export class ManageCustomerComponent implements OnInit {
@ViewChild('f') form;
registerForm: FormGroup;
submitted = false;
loading = false;
onSubmit() {
this.submitted = true;
if (this.registerForm.valid) {
this.loading = true;
let values = JSON.stringify(this.registerForm.value);
this.server
.request('POST', '/company/store', {
company_name: this.registerForm.value.company_name,
company_email: this.registerForm.value.email,
company_phone: this.registerForm.value.phone,
company_phone1: this.registerForm.value.phone1,
company_fax: this.registerForm.value.fax,
company_parish: this.registerForm.value.parish,
company_city: this.registerForm.value.city,
company_person_title: this.registerForm.value.salutation,
company_person_first_name: this.registerForm.value.first_name,
company_person_last_name: this.registerForm.value.last_name,
company_person_email: this.registerForm.value.email2,
company_person_phone: this.registerForm.value.work_phone,
company_person_mobile: this.registerForm.value.mobile_phone,
})
.subscribe(
(data) => {
this.loading = false;
Swal.fire({
position: 'top-end',
icon: 'success',
title: 'Company added succesfully',
showConfirmButton: false,
showCloseButton: true,
});
console.log(data);
// let elem = document.getElementById('close2');
//
//let evt = new MouseEvent('click', {
// bubbles: true,
// cancelable: true,
// view: window
// });
//
//elem.dispatchEvent(evt);
//this.registerForm.reset();
//this.form.form.reset();
//this.form.form.markAsPristine();
//this.form.form.markAsUntouched();
//this.form.form.updateValueAndValidity();
this.form.resetForm();
},
(error) => {
this.loading = false;
}
);
}
}
constructor(
private fb: FormBuilder,
private server: ServerService,
private http: HttpClient,
private changeDetectorRef: ChangeDetectorRef
) {
this.registerForm = this.fb.group({
company_name: ['', Validators.required],
email: ['', [Validators.required, Validators.email]],
phone: ['', Validators.required],
phone1: [''],
fax: [''],
parish: [''],
city: [''],
mailing_address: [''],
salutation: [''],
first_name: [''],
last_name: [''],
email2: [''],
work_phone: [''],
mobile_phone: [''],
});
}
ngOnInit(): void {}
ngAfterViewInit() {
$('.select-custom').selectpicker();
}
}
Комментарии:
1. используете ли вы a
updateOn: 'submit'
для обновления значений элемента управления формой?2. @at-in Нет, я просто использую простую отправку и сброс
3. можете ли вы предоставить доступ ко всему файлу component.ts?
4. попробуйте
this.form.form.markAsPristine();this.form.form.markAsUntouched();this.form.form.updateValueAndValidity();
5. или
form.resetForm();
Ответ №1:
ну, могут быть и другие способы, но, как я вижу, вы используете отправленное логическое значение, вы можете установить для него значение false после отправки данных формы на сервер и использования resetForm
в вашей функции подписки API