W Angular 1 mogłem wybrać domyślną opcję dla rozwijanej listy, używając:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
W Angular 2 mam:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Jak mogę wybrać opcję domyślną, biorąc pod uwagę moje dane opcji:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
a moja wartość domyślna to back
?
[(ngModel)]
powiązania, więc słucha[selected]
wiązania w plnkr a nie w kodzie OP (patrz moja odpowiedź na link do rozwidlonego plnr, który wyjaśnia ten efekt)selected="workout.name == 'back'"
Formularze reaktywne używają:[selected]=workout.name == 'back'
"
. Użyłem twojego kodu z inną taką zmienną[selected]="workout.name == exercise.name"
Jeśli przypiszesz wartość domyślną
selectedWorkout
i użyjesz[ngValue]
(co pozwala na użycie obiektów jako wartości - w przeciwnym razie obsługiwany jest tylko łańcuch), to powinno po prostu zrobić to, co chcesz:Upewnij się, że wartość, do której przypisujesz,
selectedWorkout
jest taka sama, jak ta używana w programieworkouts
. Inna instancja obiektu, nawet z tymi samymi właściwościami i wartościami, nie zostanie rozpoznana. Sprawdzana jest tylko tożsamość obiektu.aktualizacja
Dodano obsługę kątową dla
compareWith
, która ułatwia ustawienie wartości domyślnej, gdy[ngValue]
jest używana (dla wartości obiektów)Z dokumentacji https://angular.io/api/forms/SelectControlValueAccessor
W ten sposób inna (nowa) instancja obiektu może zostać ustawiona jako wartość domyślna i
compareFn
jest używana do określenia, czy powinny być uważane za równe (na przykład, czyid
właściwość jest taka sama.źródło
[value]
zamiast[ngValue]
lub twój kod w jakiś sposób powoduje, że wartość zostanie przekonwertowana na ciąg.c1
i coc2
wskazujecompareFn
? A także, jak działa ocena w ciele funkcji?selectedCountries
icountry
po prostu ustaw wartość modelu na domyślną, jak chcesz:
Stworzyłem tutaj widelec plnkr @Douglas , aby zademonstrować różne sposoby uzyskania pożądanego zachowania w angular2.
źródło
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Dodaj ten kod na pozycji o listy wyboru.
<option [ngValue]="undefined" selected>Select</option>
źródło
Możesz podejść w ten sposób:
lub w ten sposób:
lub możesz ustawić wartość domyślną w ten sposób:
lub
źródło
Użyj indeksu, aby wyświetlić pierwszą wartość jako domyślną
źródło
Zgodnie z https://angular.io/api/forms/SelectControlValueAccessor potrzebujesz tylko:
theView.html:
theComponent.ts
źródło
Trochę walczyłem z tym, ale skończyło się na następującym rozwiązaniu ... może to komuś pomoże.
Szablon HTML:
Składnik:
źródło
W pełni rozwijam inne posty, oto co działa w przewodniku Szybki start Angular2,
Aby ustawić domyślny DOM: wraz z
*ngFor
, użyj warunkowej instrukcji w atrybucie<option>
'sselected
.Aby ustawić wartość
Control
domyślną: użyj jej argumentu konstruktora. W przeciwnym razie przed zmianą, gdy użytkownik ponownie wybierze opcję, która ustawia wartość formantu z atrybutem value wybranej opcji, wartość kontrolna będzie miała wartość null.scenariusz:
narzut:
źródło
Możesz użyć tego
[ngModel]
zamiast[(ngModel)]
i jest OKźródło
Możesz zrobić jak wyżej:
W powyższym kodzie, jak widać, wybrany atrybut opcji powtarzania jest ustawiany na sprawdzenie indeksu powtarzającej się pętli listy. [attr. <nazwa atrybutu html>] służy do ustawiania atrybutu html w angular2.
Innym podejściem będzie ustawienie wartości modelu w pliku maszynopisu jako:
źródło
Dodaj do odpowiedzi @Matthijs, upewnij się, że Twój
select
element maname
atrybut iname
jest unikalny w Twoim szablonie HTML. Angular 2 używa nazwy wejściowej do aktualizacji zmian. Dlatego jeśli istnieją zduplikowane nazwy lub nie ma nazwy dołączonej do elementu wejściowego, powiązanie zakończy się niepowodzeniem.źródło
Dodaj wybraną właściwość powiązania, ale upewnij się, że jest ona pusta, dla innych pól, np .:
Teraz to zadziała
źródło
Jeśli używasz formularza,
name
wewnątrzselect
tagu powinno znajdować się pole .Wszystko, co musisz zrobić, to po prostu dodać
value
dooption
tagu.selectedWorkout
wartość powinna być „wstecz” i gotowe.źródło
Jeśli nie chcesz dwukierunkowego wiązania przez [(ngModel)], zrób to:
Właśnie przetestowałem mój projekt na Angular 4 i działa! AccountList to tablica obiektów Account, których nazwa jest właściwością Account.
Ciekawe spostrzeżenie:
[ngValue] = "acct" daje taki sam wynik jak [ngValue] = "acct.name".
Nie wiem, jak Angular 4 to robi!
źródło
źródło
Dla mnie definiuję kilka właściwości:
Następnie w konstruktorze i w ngOnInit
I w szablonie dodaję to jako pierwszą opcję wewnątrz elementu select
Jeśli zezwolisz na wybranie pierwszej opcji, możesz po prostu usunąć użycie właściwości disabledFirstOption
źródło
W moim przypadku tutaj
this.selectedtestSubmitResultView
jest ustawiona wartość domyślna na podstawie warunków, a zmiennatestSubmitResultView
musi być taka sama jaktestSubmitResultView
. To rzeczywiście zadziałało dla mniePo więcej informacji,
źródło
Wcześniej miałem do czynienia z tym problemem i naprawiłem go na różne proste sposoby obejścia
Twój Component.html
Następnie w swoim component.ts możesz wykryć wybraną opcję przez
źródło
działa świetnie, jak widać poniżej:
źródło
Wystarczy umieścić ngModel i wartość, którą chcesz wybrać:
źródło