В Angular 1 я мог выбрать вариант по умолчанию для раскрывающегося списка, используя следующее:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
В Angular 2 у меня есть:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Как я могу выбрать вариант по умолчанию, учитывая мои данные о параметрах:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
и мое значение по умолчанию включено back
?
[(ngModel)]
привязки, поэтому он прослушивает[selected]
привязку в plnkr, а не в коде OP (см. Мой ответ для ссылки на разветвленный plnr, который объясняет этот эффект)selected="workout.name == 'back'"
реактивных форм:[selected]=workout.name == 'back'
"
. Я использовал ваш код с другой такой переменной[selected]="workout.name == exercise.name"
Если вы назначаете значение по умолчанию
selectedWorkout
и используете[ngValue]
(что позволяет использовать объекты в качестве значения - в противном случае поддерживается только строка), тогда он должен просто делать то, что вы хотите:Убедитесь, что значение, которое вы назначаете,
selectedWorkout
совпадает с экземпляром, используемым вworkouts
. Другой экземпляр объекта даже с такими же свойствами и значениями не распознается. Проверяется только идентичность объекта.Обновить
Добавлена поддержка Angular для
compareWith
, что упрощает установку значения по умолчанию при[ngValue]
использовании (для значений объектов)Из документов https://angular.io/api/forms/SelectControlValueAccessor
Таким образом, другой (новый) экземпляр объекта может быть установлен в качестве значения по умолчанию и
compareFn
используется для определения того, следует ли считать их равными (например, еслиid
свойство такое же.источник
[value]
вместо,[ngValue]
или ваш код каким-то образом заставляет значение преобразовываться в строку.c1
иc2
указывать вcompareFn
? А также как работает оценка в теле функции?selectedCountries
иcountry
просто установите для модели значение по умолчанию, которое вы хотите, например:
Я создал вилку plnkr @Douglas' здесь , чтобы продемонстрировать различные способы , чтобы получить желаемое поведение в angular2.
источник
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Добавьте этот Код в позицию o в списке выбора.
<option [ngValue]="undefined" selected>Select</option>
источник
Можно подойти так:
или так:
или вы можете установить значение по умолчанию следующим образом:
или
источник
Используйте индекс, чтобы показать первое значение по умолчанию
источник
Согласно https://angular.io/api/forms/SelectControlValueAccessor вам просто нужно следующее:
theView.html:
theComponent.ts
источник
Немного боролся с этим, но в итоге получил следующее решение ... может быть, это кому-то поможет.
HTML-шаблон:
Составная часть:
источник
Вот что работает в кратком руководстве Angular2, полностью уточняя другие сообщения,
Чтобы установить DOM default: вместе с
*ngFor
, используйте условный оператор в атрибуте<option>
'sselected
.Чтобы установить значение по
Control
умолчанию: используйте аргумент конструктора. В противном случае перед изменением, когда пользователь повторно выбирает параметр, который устанавливает значение элемента управления с атрибутом значения выбранного параметра, значение элемента управления будет нулевым.сценарий:
разметка:
источник
Вы можете использовать это
[ngModel]
вместо,[(ngModel)]
и это нормальноисточник
Вы можете сделать как указано выше:
В приведенном выше коде, как вы можете видеть, выбранный атрибут повторяющейся опции устанавливается при проверке индекса повторяющегося цикла списка. [attr. <имя атрибута html>] используется для установки атрибута html в angular2.
Другой подход заключается в установке значения модели в файле машинописного текста как:
источник
Добавьте к ответу @Matthijs, убедитесь, что у вашего
select
элемента естьname
атрибут иname
он уникален в вашем шаблоне html. Angular 2 использует имя входа для обновления изменений. Таким образом, если есть повторяющиеся имена или нет имени, прикрепленного к элементу ввода, привязка не будет выполнена.источник
Добавьте выбранное свойство привязки, но убедитесь, что оно равно null, для других полей, например:
Теперь будет работать
источник
Если вы используете форму,
name
внутриselect
тега должно быть поле .Все, что вам нужно сделать, это просто добавить
value
вoption
тег.selectedWorkout
значение должно быть "назад", и все готово.источник
Если вам не нужна двусторонняя привязка через [(ngModel)], сделайте следующее:
Только что протестировал мой проект на Angular 4, и он работает! AccountList - это массив объектов Account, имя которого является свойством Account.
Интересное наблюдение:
[ngValue] = "acct" дает тот же результат, что и [ngValue] = "acct.name".
Не знаю, как это удается в Angular 4!
источник
источник
Для себя я определяю некоторые свойства:
Затем в конструкторе и ngOnInit
И в шаблоне я добавляю это как первую опцию внутри элемента select
Если вы разрешите выбрать первый вариант, вы можете просто удалить использование свойства disabledFirstOption
источник
В моем случае здесь
this.selectedtestSubmitResultView
установлено значение по умолчанию на основе условий, и переменнаяtestSubmitResultView
должна быть такой же, какtestSubmitResultView
. Это действительно сработало для меняЧтобы получить больше информации,
источник
Я сталкивался с этой проблемой раньше, и я исправил ее с помощью различных простых способов решения
Для вашего Component.html
Затем в вашем component.ts вы можете определить выбранный вариант с помощью
источник
отлично работает, как показано ниже:
источник
Вам просто нужно указать ngModel и значение, которое вы хотите выбрать:
источник