Вы должны создать FormGroup
вместо отдельных FormControl
с.
Genre
в вашем фильме - string
, но для списка множественного выбора потребуется массив строк, чтобы отобразить несколькоценности.Кроме того, похоже, что между genres
(Action, Crime
) есть пробел, который при усечении создаст дополнительное начальное пространство в Crime
.Чтобы это исправить, вам нужно split
на ,
, а затем применить map
к элементам массива, чтобы удалить дополнительное пространство с помощью trim
.Это будет сделано следующим образом:
genre: [this.selectedMovie.Genre.split(',').map(genre => genre.trim()), [Validators.required]],
Таким образом, ваш код будет выглядеть примерно так:
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
...
selectedMovie: MyMovie;
movieForm: FormGroup;
genresList = ['Action', 'Comedy', 'Horror', 'Fantasy', 'Drama', 'Romance'];
constructor(
private fb: FormBuilder,
private dataService: DataService
) {}
ngOnInit() {
this.dataService.getMovie('anyIndexHere')
.subscribe(selectedMovie => {
this.selectedMovie = {
id: 'Some ID',
...selectedMovie
}
this.movieForm = this.fb.group({
title: [this.selectedMovie.Title, [Validators.required]],
year: [this.selectedMovie.Year, [Validators.required]],
runtime: [this.selectedMovie.Runtime, [Validators.required]],
genre: [this.selectedMovie.Genre.split(',').map(genre => genre.trim()), [Validators.required]],
director: [this.selectedMovie.Director, [Validators.required]],
});
});
}
Поскольку мы уже присваиваем значение по умолчанию для genre
FormControl
, он будет выбран по умолчанию в вашем шаблоне.
Итак, в вашем шаблоне вы теперь будете использовать синтаксис привязки атрибутов ([formGroup]="movieForm"
) для привязки к форме.И затем для mat-select
, так как вы будете указывать formControlName
как genre
, который является FormControl
для поля Жанр, вы увидите, что Жанр выбран по умолчанию.
Так что вашшаблон будет выглядеть примерно так:
<form [formGroup]="movieForm">
...
<mat-form-field>
<mat-select placeholder="Movie Genre" formControlName="genre" multiple>
<mat-option *ngFor="let genre of genresList" [value]="genre">
{{genre}}
</mat-option>
</mat-select>
</mat-form-field>
...
</form>
Вот вам Sample StackBlitz для вашей ссылки.