Чтобы передать значение поля ввода строки типа в angular

У меня есть компонент 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. Ниже предупреждение:

Чтобы передать значение поля ввода строки типа в angular

Когда я выполняю операцию ПОЧТА без заполнения email(input field), POST проходит нормально, JSON выглядит следующим образом:

  {

   "firstName": "Lee",
   "lastName": "Cooper",
   "gender": "Male",
}

Что не так с кодом ??

вы используете json.parse где-то в коде?

Pardeep Jain 18.12.2018 10:37

Нет, я не использую.

PGH 18.12.2018 10:37

извините мой плохой JSON.stirngify?

Pardeep Jain 18.12.2018 10:38

Я не использую оба метода.

PGH 18.12.2018 10:40

@PrashanthGH проверьте, что они хотят или какой тип eMailAddresses это поле строка или массив строк?

Abhishek 18.12.2018 10:44

Электронное письмо не станет волшебным образом просто массивом, потому что вы укажете его как массив в интерфейсе. Тип вашей модели формы - это строка, которая также будет отправлена ​​на сервер, если только ваша служба не преобразует ее в массив. Возможно, опубликуйте этот код, чтобы мы действительно знали, что происходит.

Chrillewoodz 18.12.2018 10:52

Вам нужен код service ??

PGH 18.12.2018 10:54

На вашем снимке экрана изображен свернутый узел error. Раскройте его полностью и посмотрите, что там внутри.

Kirk Larkin 18.12.2018 12:34

Хорошо, я отправлю это снова.

PGH 18.12.2018 12:34
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
9
804
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема с полем адреса электронной почты. В 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 не является функцией

PGH 18.12.2018 11:48

пожалуйста, инициализируйте someContact как общедоступный someContact: IContact = {} и перед тем, как нажимать массив инициализации, как this.someContact.eMailAddresses = []

umesh99 18.12.2018 12:23

Теперь email хранится в БД как null.

PGH 18.12.2018 12:39

Пробовал ставить public someContact: IContact = {}; Получение этого предупреждения Тип '{}' нельзя присвоить типу 'IContact'.

PGH 18.12.2018 12:40

правильный ли ожидаемый JSON? Можете ли вы показать мне JSON после отправки

umesh99 18.12.2018 12:44

JSON ===> {"eMailAddresses": [null], "firstName": "Lee", "lastName": "Cooper", "BirthDate": "2018-12-02T18: 30: 00Z", "пол": "Мужской",}

PGH 18.12.2018 12:46

Вы можете дать мне console.info этого.addForm.value.email?

umesh99 18.12.2018 12:52

Он записывается как undefined.

PGH 18.12.2018 12:56

это означает, что он не получает значение, а также устанавливает для него значение null при инициализации группы форм, и если вы можете ввести действительный адрес электронной почты и дать мне console.info этого.addForm.value

umesh99 18.12.2018 13:02

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