Angular 2, установите значение по умолчанию для выбора опции
Я пытаюсь добавить значение по умолчанию к опции. Он будет похож на своего рода заполнителя, и я использую этот метод для этого.
В чистом HTML это работает, но если я пытаюсь использовать *ngFor
атрибута angular 2, он ничего не выбирает.
Вот мой код, который я использую в чистом HTML:
<select name="select-html" id="select-html">
<option value="0" selected disabled>Select Language</option>
<option value="1">HTML</option>
<option value="2">PHP</option>
<option value="3">Javascript</option>
</select>
И используя шаблон angular:
<select name="select" id="select" [(ngModel)]="selectLanguage">
<option *ngFor="let item of selectOption"
[selected]="item.value==0"
[disabled]="item.value==0">{{item.label}}</option>
</select>
Класс
import {Component} from '@angular/core';
@Component({
moduleId: module.id,
selector: 'app-form-select',
templateUrl: 'default.component.html'
})
export class DefaultComponent {
private selectOption: any;
constructor() {
this.selectOption = [
{
id: 1,
label: "Select Language",
value: 0
}, {
id: 2,
label: "HTML 5",
value: 1
}, {
id: 3,
label: "PHP",
value: 2
}, {
id: 4,
label: "Javascript",
value: 3
}
]
}
}
Я хочу, чтобы Select Language
выбирался как значение по умолчанию. Он отключен, но не выбран.
Как я могу выбрать его как значение по умолчанию?
Живой пример
Ответы
Ответ 1
Обновление
4.0.0-beta.6 добавлен compareWith
<select [compareWith]="compareFn" [(ngModel)]="selectedCountries">
<option *ngFor="let country of countries" [ngValue]="country">
{{country.name}}
</option>
</select>
compareFn(c1: Country, c2: Country): boolean {
return c1 && c2 ? c1.id === c2.id : c1 === c2;
}
таким образом экземпляр, назначенный selectedCountries
, не обязательно должен быть идентичным объектом, но может быть передана пользовательская функция сравнения, например, чтобы иметь возможность сопоставлять другой экземпляр объекта с идентичными значениями свойств.
оригинальный
Если вы хотите использовать объект как значение, вам нужно использовать [ngValue]
в элементе option.
<select name="select" id="select" [(ngModel)]="selectLanguage">
<option *ngFor="let item of selectOption" [ngValue]="item"
[disabled]="item.value==0">{{item.label}}</option>
</select>
Когда selectLanguage
имеет значение параметра, назначенное [(ngModel)]="..."
, это сделает один из выбранных по умолчанию:
import {Component} from '@angular/core';
@Component({
moduleId: module.id,
selector: 'app-form-select',
templateUrl: 'default.component.html'
})
export class DefaultComponent {
private selectOption: any;
constructor() {
this.selectOption = [
{
id: 1,
label: "Select Language",
value: 0
}, {
id: 2,
label: "HTML 5",
value: 1
}, {
id: 3,
label: "PHP",
value: 2
}, {
id: 4,
label: "Javascript",
value: 3
}
];
this.selectLanguage = this.selectOption[0];
}
}
Ответ 2
Попробуйте ниже пример кода для этого:
Замените yourValue
любым значением, которое вы хотите выбрать по умолчанию
<select placeholder="country" >
<option *ngFor="let country of countriesList" [ngValue]="country" [selected]="country.country_name == yourValue" >
{{country.country_name}}
</option>
</select>
Ответ 3
Мне удобнее удалить параметр по умолчанию из массива selectOption
и указать отдельно выбранный вариант по умолчанию.
<select name="select" id="select" [(ngModel)]="selectLanguage">
<option [ngValue]="undefined" disabled>Select Language</option>
<option
*ngFor="let item of selectOption"
[value]="item.value"
>
item.label
</option>
</select>