Угловая реактивная ошибка формы: необходимо указать значение для управления формой с именем: - PullRequest
0 голосов
/ 26 июня 2018

Я предполагаю, что я очень новичок в изучении углов. Я пытаюсь реализовать угловую реактивную форму, но я сталкиваюсь с этой ошибкой: «Необходимо указать значение для управления формой с именем: Назначение.

Это соответствующие части моего компонента и мой HTML:

import { Component, Inject } from '@angular/core';
import { Http } from "@angular/http";
import { FormGroup, FormControl, FormBuilder, Validators } from "@angular/forms";

@Component({
    selector: 'home',
    templateUrl: './home.component.html'
})
export class HomeComponent {

    locations: Location[];
    flightChoice: FlightChoice;
    form: FormGroup;


    constructor(http: Http, @Inject('BASE_URL') private baseUrl: string,
        private fb: FormBuilder) {

        this.createForm();

        http.get(baseUrl + 'api/FlightChoice/dest_locations').subscribe(result => {
            this.locations = result.json() as Location[];
            console.log(this.locations);

        }, error => console.error(error));

        http.get(baseUrl + 'api/FlightChoice/choice').subscribe(result => {
            this.flightChoice = result.json() as FlightChoice;
            this.updateForm();
        }, error => console.error(error));

    }

    createForm() {
        this.form = this.fb.group({
            Destination: [0],
            NrPasg: [1],
            TwoWays: [false],
            DepartureDate: ['', Validators.required],
            ReturnDate: ['', Validators.required]
        });
    }

    updateForm() {

        this.form.setValue({
            Destination: this.flightChoice.DestinationId,
            NrPasg: this.flightChoice.NrPasg,
            TwoWays: this.flightChoice.TwoWays,
            DepartureDate: this.flightChoice.DepartureDate,
            ReturnDate: this.flightChoice.ReturnDate
        });

    }

HTML:

<form [formGroup]="form" (ngSubmit)="onSubmit()">
        <div>
            <label for="destination">Destination:</label>
            <br />
            <select id="destination" formControlName="Destination">
                <option *ngFor="let location of locations" value="{{ location.id }}">
                    {{ location.name }}
                </option>
            </select>
            <br />
            <label for="nrPasg">Number of Passengers:</label>
            <br />
            <input formControlName="NrPasg" type="number" id="nrPasg" value="1" />
            <label for="twoWays"></label>
            <br />
            <select id="twoWays" formControlName="TwoWays">
                <option value="false">one way</option>
                <option value="true">two ways</option>
            </select>
            <br />
            <label for="departureDate">Departure Date:</label>
            <br />
            <input formControlName="DepartureDate" type="date" id="departureDate" />
            <br />
            <label for="returnDate">Return Date:</label>
            <br />
            <input formControlName="ReturnDate" type="date" id="returnDate" />

        </div>
        <div>
            <button type="submit">Search Flights</button>

        </div>
    </form>

Я знаю, что, возможно, что-то неправильно пишу в методе CreateForm, но я не уверен, как присвоить значения

Ответы [ 2 ]

0 голосов
/ 25 января 2019

К сожалению, «undefined» не разрешен, вам нужно установить для каждого свойства значение «null».

Вполне допустимо, чтобы свойство имело значение неопределенное, обычное явление, поступающее непосредственно с сервера.

Вы можете преобразовать свойства перед вызовом setValue примерно так:

   // set all 'missing' OR 'undefined' properties to null
        const newValue: any = {...value};

        for (const field in this.controls) { 

            if (newValue[field] === undefined) {
                newValue[field] = null;
            }
        }

        super.setValue(newValue, options);

Остерегайтесь, потому что JSON.stringify() удалит undefined, и поэтому, если вы используете это для отправки значения обратно на ваш сервер, вам нужно убедиться, что он может обрабатывать отсутствующие свойства там.

0 голосов
/ 06 августа 2018

Возможно, ошибка возникает из-за this.flightChoice.DestinationId === undefined, и вы пытаетесь установить undefined в поле Destination в форме.

Проверьте, правильно ли API загружает данные в this.flightChoice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...