Angular 6 выбрать значение по умолчанию не работает - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть выпадающий список с выбранным по умолчанию отключенным значением и список районов, загружаемых из серверной части. Моя проблема в том, что раскрывающийся список никогда не показывает выбранное значение, всегда показывает пустым.

<form [formGroup]="districtForm">
  District:
  <select formControlName="districtControl" (change)="filterBuildings($event.target.value)" [value]='' class="form-control">
    <option value="" disabled selected>Please select district</option>
    <option *ngFor="let district of districts" [ngValue]="district">
      {{district.districtName}}
    </option>
  </select>
  <div *ngIf="errorMessageDistrict" class="text-danger">District is required
  </div>
</form>

Вот мой код TS:

import { Component } from '@angular/core';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { InfoService } from '../../services/info.service';
import { first } from 'rxjs/operators';
import { District } from '../../models/district';
import { FormGroup, FormControl, FormBuilder } from '@angular/forms';

@Component({
  selector: 'app-school-switch',
  templateUrl: './school-switch.component.html',
  styleUrls: ['./school-switch.component.scss']
})
export class SchoolSwitchComponent {
  districts: District[] = [];
  selectedDistrict: District;
  errorMessageDistrict;
  firstDistrict: any;
  districtForm = new FormGroup({
    districtControl: new FormControl()
  });

  constructor(
    public activeModal: NgbActiveModal,
    private infoService: InfoService,
    private fb: FormBuilder
  ) {}

  ngOnInit() {
    this.infoService
      .getDistricts()
      .pipe(first())
      .subscribe(districts => {
        this.districts = districts;
      });
  }

  filterBuildings(filterVal: any) {
      this.selectedDistrict = this.districtForm.value.districtControl;
      //some more code
  }

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Обычно я создаю FormGroup в ngOnInit, а затем определяю значение по умолчанию в нем следующим образом:

import { FormGroup, FormBuilder, Validators } from '@angular/forms';

constructor(private formBuilder: FormBuilder){
}

ngOnInit(){
      this.districtForm = this.formBuilder.group({
        districtControl: ['myDefaultValue', Validators.required]
      });
}
0 голосов
/ 17 сентября 2018

Избавьтесь от [value] и вместо этого используйте [(ngModel)] с selectedDistrict для select в вашем шаблоне, который будет инициализирован в 'none' в классе TypeScript. Также добавьте [ngValue] к опции Placeholder. Примерно так:

<form [formGroup]="districtForm">
  District:
  <select 
    formControlName="districtControl" 
    [(ngModel)]="selectedDistrict" 
    class="form-control">
    <option 
      [ngValue]="'none'" 
      disabled 
      selected>
      Please select district
    </option>
    <option 
      *ngFor="let district of districts" 
      [ngValue]="district">
      {{district.districtName}}
    </option>
  </select>
  <div 
    *ngIf="errorMessageDistrict" 
    class="text-danger">
    District is required
  </div>
</form>

Вот вам образец StackBlitz для справки.

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