Угловое поле формы с 6 матами с выбором матов без выбора значений

Я новичок в Angular 6, и я работаю над проектом, в котором я использую материальный дизайн с реактивной формой, которая использует контроль формы. Итак, проблема, с которой я столкнулся, заключается в том, что все другие поля работают нормально, кроме mat-select, где правильно отображается раскрывающееся содержимое, но когда я выбираю его, выбранные значения не отражаются в элементе управления формой. И данные выбора матов поступают из бэк-энда

Вот мой html-код:

<mat-form-field class="example-full-width">
      <mat-select placeholder="Source City" formControlName="sourceCityControl" required [errorStateMatcher]="matcher">
        <mat-option *ngFor="let city of cities" [value]="city">
          {{city.name}}
        </mat-option>
      </mat-select>
      <mat-error>
        Source City <strong> Required </strong>
      </mat-error>
    </mat-form-field>

    <br> <br>

    <mat-form-field class="example-full-width">
      <mat-select placeholder="Destination City" formControlName="destinationCityControl" required [errorStateMatcher]="matcher">
        <mat-option *ngFor="let city of cities" [value]="city">
          {{city.name}}
        </mat-option>
      </mat-select>
      <mat-error>
        Destination City <strong> Required </strong>
      </mat-error>

    </mat-form-field> 
    <!-- other form elements  -->
    <!-- to check form elements -->
    {{profileForm.value | json}}

А вот мой код файла TypeScript:

public cities = [];
minDate = new Date();
nextdate = this.minDate.getUTCDate();
nextmonth = this.minDate.getUTCMonth();
nextyear = this.minDate.getFullYear();
maxDate = new Date(this.nextyear, this.nextmonth + 1, this.nextdate);
host: Oldoffer;
offerModel: any;
matcher = new MyErrorStateMatcher();
constructor(private fb: FormBuilder, private _offerService: 
OfferRideService, private router: Router, private editService: EditService) 
{ }
test1: string;
test2: Date;
test3: Date;
profileForm: FormGroup;
ngOnInit() {
console.log(this.nextdate);
this._offerService.getCities().subscribe(data => this.cities = data);
this.editService.getHost().subscribe((data) => {
  this.host = data;
  this.test1 = this.host.date.toString();
  this.test2 = new Date(this.test1.slice(0, 19) + 'Z');
  this.test3 = new Date(this.test2.getFullYear(), this.test2.getUTCMonth(), 
  this.test2.getUTCDate())
  this.profileForm = new FormGroup({
    sourceCityControl: new FormControl('', Validators.required),
    destinationCityControl: new FormControl('', Validators.required),
    dateControl: new FormControl(this.test3, Validators.required),
    seatsControl: new FormControl(this.host.noOfSeats, [Validators.required, 
    Validators.min(1), Validators.max(4)]),
    amountControl: new FormControl(this.host.amount, [Validators.required, 
    Validators.min(0), Validators.max(2000)]),
    acControl: new FormControl(this.host.preference.ac),
    musicControl: new FormControl(this.host.preference.music),
    smokingControl: new FormControl(this.host.preference.smoking),
    petsControl: new FormControl(this.host.preference.pets)
  });
})
}//other code omitted

Любая помощь и предложения ?? Спасибо ...


person Ling Raj    schedule 13.09.2018    source источник
comment
У вас есть элемент <form>, который объединяет все элементы управления вашей формы с соответствующей директивой formGroup? На сайте документации есть пример этого.   -  person p4r1    schedule 13.09.2018
comment
да у меня есть что, извините забыл вставить в этот вопрос.   -  person Ling Raj    schedule 14.09.2018


Ответы (1)


Я воспроизвел вашу проблему в простейшей форме, и вот что вам не хватает: возможно, вам не хватает элемента <form> из других formContorls, поэтому всегда следите за консолью. Это будет ваш лучший друг, если вы новичок в angular. Также при создании FormGroups смотрите документацию по нему, потому что это не лучший способ сделать это.

Просто следуйте примеру, который я построил для вас, и он должен решить ваши проблемы: https://stackblitz.com/edit/angular-nbihkv

person Gentle Brute    schedule 13.09.2018
comment
Спасибо, чувак, ты спас мне день, но ты можешь просто сказать, что было не так с моим подходом и почему нам нужно делать это вот так, потому что, как новичок, я не вижу никакой разницы. - person Ling Raj; 14.09.2018