У меня есть компонент customer
, который используется для добавления новых клиентов. Код компонент выглядит следующим образом:
HTML
<div >
<form [formGroup] = "addForm">
<div>
<mat-form-field>
<input matInput placeholder = "First Name" formControlName = "firstname" required>
<mat-error *ngIf = "addForm.controls.firstname.hasError('required')">
Please enter first name
</mat-error>
</mat-form-field>
</div>
<div>
<mat-form-field>
<input matInput placeholder = "Last Name" formControlName = "lastname" required>
<mat-error *ngIf = "addForm.controls.lastname.hasError('required')">
Please enter last name
</mat-error>
</mat-form-field>
</div>
<div>
<mat-radio-group formControlName = "gender">
<div>Gender</div>
<mat-radio-button value = "Male">Male</mat-radio-button>
<mat-radio-button value = "Female">Female</mat-radio-button>
</mat-radio-group>
</div>
<div>
<mat-form-field>
<input matInput placeholder = "Email Address" formControlName = "email" required>
<mat-error *ngIf = "addForm.controls.email.hasError('required') ">
Please enter email address
</mat-error>
</mat-form-field>
</div>
<div>
<button mat-raised-button (click) = "onAdd()">ADD</button>
</div>
</form>
TS
import { Component, OnInit, VERSION, ViewChild } from '@angular/core';
import {
FormBuilder,
FormControl,
FormGroup,
Validators,
} from '@angular/forms';
import { Router } from '@angular/router';
import { IContact } from 'src/app/models/app.models';
import { CustomersService } from 'src/app/services/customers.service';
@Component({
selector: 'asd-customer',
templateUrl: './customer.component.html',
styleUrls: ['./customer.component.css'],
})
export class CustomerComponent implements OnInit {
public addForm: FormGroup;
public someContact: IContact;
constructor(private fb: FormBuilder,
public customersService: CustomersService) {}
public ngOnInit(): void {
this.addForm = this.fb.group({
firstname: [null, [Validators.required],
lastname: [null, [Validators.required],
email: ['', [Validators.required],
gender: [null],
});
}
public onAdd(): void {
this.someContact = this.addForm.value;
this.customersService.addCustomer(this.someContact);
}
}
model.ts file
export interface IContact {
firstName: string;
lastName: string;
gender: string;
eMailAddresses: string[];
}
Ожидаемый JSON после запроса POST:
{
"firstName": "Alfien",
"lastName": "Urlich",
"gender": "Male",
"eMailAddresses": ["[email protected]"],
}
Когда я заполняю все поля ввода форма и пытаюсь выполнить операцию http POST. Я получаю предупреждение как Плохой запрос из-за email
.
Ниже предупреждение:
Когда я выполняю операцию ПОЧТА без заполнения email(input field)
, POST проходит нормально, JSON выглядит следующим образом:
{
"firstName": "Lee",
"lastName": "Cooper",
"gender": "Male",
}
Что не так с кодом ??
Нет, я не использую.
извините мой плохой JSON.stirngify
?
Я не использую оба метода.
@PrashanthGH проверьте, что они хотят или какой тип eMailAddresses
это поле строка или массив строк?
Электронное письмо не станет волшебным образом просто массивом, потому что вы укажете его как массив в интерфейсе. Тип вашей модели формы - это строка, которая также будет отправлена на сервер, если только ваша служба не преобразует ее в массив. Возможно, опубликуйте этот код, чтобы мы действительно знали, что происходит.
Вам нужен код service
??
На вашем снимке экрана изображен свернутый узел error
. Раскройте его полностью и посмотрите, что там внутри.
Хорошо, я отправлю это снова.
Проблема с полем адреса электронной почты. В Form-control это одна строка, а в интерфейсе - массив. Поэтому, если вы хотите добавить ее, установите ее, как показано ниже,
public someContact: IContact = {};
public onAdd(): void {
this.someContact.firstName = this.addForm.value.firstName;
this.someContact.lastname = this.addForm.value.lastname;
this.someContact.gender = this.addForm.value.gender;
this.someContact.eMailAddresses=[]
this.someContact.eMailAddresses.push(this.addForm.value.email);
}
изменить интерфейс следующим образом
export interface IContact {
firstName ?: string;
lastName ?: string;
gender ?: string;
eMailAddresses ?: string[];
}
но в соответствии с вашим сценарием каждый раз при отправке будет только один адрес электронной почты.
Получение этого предупреждения: ОШИБКА TypeError: this.someContact.eMailAddresses.push не является функцией
пожалуйста, инициализируйте someContact как общедоступный someContact: IContact = {} и перед тем, как нажимать массив инициализации, как this.someContact.eMailAddresses = []
Теперь email
хранится в БД как null
.
Пробовал ставить public someContact: IContact = {};
Получение этого предупреждения Тип '{}' нельзя присвоить типу 'IContact'.
правильный ли ожидаемый JSON? Можете ли вы показать мне JSON после отправки
JSON ===> {"eMailAddresses": [null], "firstName": "Lee", "lastName": "Cooper", "BirthDate": "2018-12-02T18: 30: 00Z", "пол": "Мужской",}
Вы можете дать мне console.info этого.addForm.value.email?
Он записывается как undefined
.
это означает, что он не получает значение, а также устанавливает для него значение null при инициализации группы форм, и если вы можете ввести действительный адрес электронной почты и дать мне console.info этого.addForm.value
вы используете
json.parse
где-то в коде?