Я хочу установить значение «пицца-1» поверх опции выбора, массив является переменным, и я не могу создать массив заказов. Поэтому для меня важно сделать это из html-шаблона. Есть ли способ указать параметр, который будет первым по умолчанию?
Файл компонента
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: []
})
export class AppComponent {
name = 'Angular';
selected: any = -1;
foods= [
{value: 'steak-0', viewValue: 'Steak'},
{value: 'pizza-1', viewValue: 'Pizza'},
{value: 'tacos-2', viewValue: 'Tacos'}
];
}
Шаблон
<mat-form-field>
<mat-select placeholder = "Favorite food">
<mat-option *ngFor = "let food of foods" [value] = "food.value">
{{food.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>





К сожалению, в Select нет способа установить конкретное значение в качестве первого параметра. Это нужно будет отразить в коде.
Поскольку вы не получаете упорядоченный массив, вам придется его создать. Один из способов сделать это - создать второй массив. Вставьте в него объект с пиццей-1, а затем остальные объекты.
Я думаю, что если вы пытаетесь заказать мат-опции из заданного массива объектов, вам нужно отсортировать массив следующим образом.
{value: 'steak-0', viewValue: 'Steak'}, к value: {food: 'Steak', val: 0}, viewValue: 'Steak'},Почему? Объекты обеспечивают эффективное структурирование данных, а не строк.
foods= [
{value: {food: 'Steak', val: 0}, viewValue: 'Steak'},
....
];
this.foods.sort(function(a, b){
var x = a.value.val.toLowerCase();
var y = b.value.val.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
Вот и все!