У меня есть простое поле формы выбора в моем проекте материалов Angular:
component.html
<mat-form-field>
<mat-select [(value)] = "modeSelect" placeholder = "Mode">
<mat-option value = "domain">Domain</mat-option>
<mat-option value = "exact">Exact</mat-option>
</mat-select>
</mat-form-field>
Где [(value)] = "modeSelect" привязан к свойству modeSelect в файле component.ts
Я хочу сделать так, чтобы <mat-option value = "domain">Domain</mat-option> был выбран по умолчанию при загрузке страницы.
ng-selected у меня не работал





Нет необходимости использовать ngModel или формы
В вашем html:
<mat-form-field>
<mat-select [(value)] = "selected" placeholder = "Mode">
<mat-option value = "domain">Domain</mat-option>
<mat-option value = "exact">Exact</mat-option>
</mat-select>
</mat-form-field>
и в вашем компоненте просто установите для своего общедоступного свойства selected значение по умолчанию:
selected = 'domain';
ах вроде работает в вашем примере, но не в моем. есть ли конкретный модуль, который мне нужно импортировать в свой appmodule.ts?
Какую версию Angular и Angular Material вы используете?
угловой материал 6.2.0 и угловой 6.0.3
Все, что вам нужно импортировать в свой модуль для этого примера, - это import {MatSelectModule} from '@angular/material';. Это у тебя есть?
да у меня есть это. в любом случае, теперь он работает! Спасибо
Как это сделать для множественного выбора? Я пробовал с этим, и он не работает <mat-select [(value)] = "selected" placeholder = "Mode" multiple> .ts file: selected = ['domain, точный'];
@Narm это неправильный способ двусторонней привязки.
У меня это не работает. Ничего, что я помещаю в атрибут [(value)], не отображается в mat-select.
Это почти сработало для меня, он устанавливал выбранное значение, но не инициализировал элемент управления формы для отображения правильного значения визуально при загрузке. В файле .ts мне также пришлось добавить в ngOnInit (): this.myForm.controls.myControl.setValue("defaultValue")
Для информации вам необходимо убедиться, что тип данных значения по умолчанию совпадает с типом данных параметров, например, <mat-select [(value)] = "heroes [0] .id"> <mat-option * ngFor = "let hero of heroes" [value] = "hero.id"> {{hero.name}} </mat-option> </mat-select> будет работать. Но если вы присвоите строковый тип [(значение)], это не сработает.
@Subbu Большое спасибо за указание на проблему dataType. Я потратил на это 3 часа. Также мне пришлось вызвать setValue ().
@romaltandel, добро пожаловать и рад, что помогло :)
У меня есть многоразовый компонент, для которого я пытаюсь установить значение по умолчанию, и я не знаю значение, которое будет использоваться по умолчанию, поскольку параметры меняются в зависимости от ввода. Поэтому я не могу сделать selected = 'some value' в моем компоненте. <div> <mat-form-field> <mat-label> {{enumType}} </mat-label> <mat-select [(value)] = "carList [0]" обязательно> <mat-option * ngFor = "let car carList" [value] = "car"> {{car}} </mat-option> </mat-select> </mat-form-field> </div> В моем компоненте я не уверен, как с этим справиться или как вызвать setValue (), поскольку я не использую форму.
Попробуй это:
<mat-select [(ngModel)] = "defaultValue">
export class AppComponent {
defaultValue = 'domain';
}
привет, я получаю эту ошибку, когда пытаюсь ответить: Ошибка: если ngModel используется в теге формы, необходимо установить либо атрибут name, либо элемент управления формы должен быть определен как «автономный» в ngModelOptions.
у вас есть мат-форма-поле?
Попробуй это
<mat-form-field>
<mat-select [(ngModel)] = "modeselect" [placeholder] = "modeselect">
<mat-option value = "domain">Domain</mat-option>
<mat-option value = "exact">Exact</mat-option>
</mat-select>
</mat-form-field>
Составная часть:
export class SelectValueBindingExample {
public modeselect = 'Domain';
}
Также не забудьте импортировать FormsModule в свой app.module.
Привет, это делает свойство modeselect = 'domain', но, похоже, не выбирает вариант домена по умолчанию
Я обновил свой ответ, пожалуйста, проверьте рабочий стек
Привет, Викас, в * ng есть динамические значения, на тот момент как показать с помощью id?
@AmishaRana Вы имели в виду, как показать значение по умолчанию, если данные динамические ??
@AmishaRana Взгляните на этот stackblitz
I was able to set the default value or whatever value using the following:
Template:
<mat-form-field>
<mat-label>Holiday Destination</mat-label>
<mat-select [(ngModel)] = "selectedCity" formControlName = "cityHoliday">
<mat-option [value] = "nyc">New York</mat-option>
<mat-option [value] = "london">London</mat-option>
<mat-option [value] = "india">Delhi</mat-option>
<mat-option [value] = "Oslo">Oslo</mat-option>
</mat-select>
</mat-form-field>
Component:
export class WhateverComponent implements OnInit{
selectedCity: string;
}
ngOnInit() {
this.selectedCity = 'london';
}
}
HTML
<mat-form-field>
<mat-select [(ngModel)] = "modeSelect" placeholder = "Mode">
<mat-option *ngFor = "let obj of Array" [value] = "obj.value">{{obj.value}}</mat-option>
</mat-select>
Теперь установите значение по умолчанию на
modeSelect
, где вы получаете значения в переменной Array.
Некоторое время меня волновал этот вопрос. Я использовал реактивные формы и исправил этим методом. PS. Использование Angular 9 и Material 9.
В хуке жизненного цикла "ngOnInit"
1) Получите объект, который вы хотите установить по умолчанию, из вашего массива или литерала объекта
const countryDefault = this.countries.find(c => c.number === '826');
Здесь я беру объект Соединенного Королевства из своего массива стран.
2) Затем установите объект FormBuilder (mat-select) со значением по умолчанию.
this.addressForm.get('country').setValue(countryDefault.name);
3) Наконец ... установите свойство связанного значения. В моем случае мне нужно значение имени.
<mat-select formControlName = "country">
<mat-option *ngFor = "let country of countries" [value] = "country.name" >
{{country.name}}
</mat-option>
</mat-select>
Работает как шарм. Я надеюсь, что это помогает
Это тот, который работает с angular 9 или выше. Спасибо!!!
Обычно вы собираетесь сделать это в своем шаблоне с помощью FormGroup, Reactive Forms и т. д.
this.myForm = this.fb.group({
title: ['', Validators.required],
description: ['', Validators.required],
isPublished: ['false',Validators.required]
});
Я хотел бы добавить сюда ответ Нарм и добавить то же самое, что и комментарий под ее ответом.
Обычно тип данных значения, присвоенного [(value)], должен соответствовать типу данных атрибута [value], используемого для mat-options. Особенно, если кто-то заполняет параметры, используя * ngFor, как показано ниже
<mat-form-field fxHide.gt-sm='true'>
<mat-select [(value)] = "heroes[0].id">
<mat-option *ngFor = "let hero of heroes" [value] = "hero.id">{{ hero.name }}</mat-option>
</mat-select>
</mat-form-field>
Обратите внимание: если вы измените [(value)] = "heroes [0] .id" на [(value)] = "heroes [0] .name", это не будет работать, поскольку типы данных не совпадают.
Это мои выводы, пожалуйста, не стесняйтесь исправлять меня, если это необходимо.
Проблема в том, что если герои "еще" не содержат данных, выдаст ошибку.
Если массив или словарь не содержат никаких значений, но используются с указанным выше индексом, ожидается, что выдает ошибку, как правило, «Индекс за пределами границ» или что-то подобное, и это ожидаемое поведение. Вы получаете сообщение об ошибке? если да, в чем ошибка?
Если ваш источник данных heroes поступил с сервера, вы получите сообщение об ошибке. Это не ошибка индекса вне диапазона, потому что в id нет heroes. Если вы считаете это несущественным, но верным, просто игнорируйте его и не понижайте его, потому что это может помочь кому-то другому.
Для вашей информации, я только что прокомментировал, чтобы прояснить вашу проблему (вы получаете сообщение об ошибке? Если да, в чем ошибка?). Кроме того, если в ответе, возвращаемом сервером, как правило, в ответ на вызов api, есть ошибка, следует позаботиться о проверке работоспособности и предпринять соответствующие действия на уровне службы, а пользовательский интерфейс должен отображать соответствующие сообщения. Не проголосовали против и не намерены. Пожалуйста, всегда перепроверяйте, прежде чем давать такие комментарии.
Мои извинения. Итак, в вашем сценарии на стороне клиента просто будет ошибка, потому что объект heroes не имеет данных, если он поступает с сервера. Представление пытается отобразить heroes, но все еще ожидает ответа сервера.
Мне потребовалось несколько часов, чтобы понять это, пока схожесть типов данных между массивом и значением по умолчанию не сработала для меня ...
Использование модели формы (реактивные формы)
--- Html code--
<form [formGroup] = "patientCategory">
<mat-form-field class = "full-width">
<mat-select placeholder = "Category" formControlName = "patientCategory">
<mat-option>--</mat-option>
<mat-option *ngFor = "let category of patientCategories" [value] = "category">
{{category.name}}
</mat-option>
</mat-select>
</mat-form-field>
---- код ts ---
ngOnInit() {
this.patientCategory = this.fb.group({
patientCategory: [null, Validators.required]
});
const toSelect = "Your Default Value";
this.patientCategory.get('patientCategory').setValue(toSelect);
}
Без формы Модель
--- html code --
<mat-form-field>
<mat-label>Select an option</mat-label>
<mat-select [(value)] = "selected">
<mat-option>None</mat-option>
<mat-option value = "option1">Option 1</mat-option>
<mat-option value = "option2">Option 2</mat-option>
<mat-option value = "option3">Option 3</mat-option>
</mat-select>
</mat-form-field>
---- код ts - selected = 'option1'; Здесь позаботьтесь о типе присвоения значения
On your typescript file, just assign this domain on modeSelect on Your ngOnInit() method like below:
ngOnInit() {
this.modeSelect = "domain";
}
И в своем HTML используйте свой список выбора.
<mat-form-field>
<mat-select [(value)] = "modeSelect" placeholder = "Mode">
<mat-option value = "domain">Domain</mat-option>
<mat-option value = "exact">Exact</mat-option>
</mat-select>
</mat-form-field>
Прочтите это, если вы заполняете свой mat-select асинхронно через HTTP-запрос.
Если вы используете службу для выполнения вызова api для возврата значений параметров выбора mat-select, вы должны установить «выбранное значение» в элементе управления формы как часть «завершенного» раздела вашего вызова api службы subscribe ().
Например:
this.customerService.getCustomers().subscribe(
customers => this.customers = customers ,
error => this.errorMessage = error as any,
() => this.customerSelectControl.setValue(this.mySelectedValue));
Привет! спасибо за ответ, вот что я получил, когда попробовал: не могу выполнить привязку к 'selected', так как это не известное свойство 'mat-option'.