In Winkel 1 konnte ich die Standardoption für ein Dropdown-Feld wie folgt auswählen:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
In Angular 2 habe ich:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Wie kann ich eine Standardoption auswählen, wenn meine Optionsdaten wie folgt lauten:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
und mein Wert, den ich standardmäßig aktivieren möchte, ist back
?
[(ngModel)]
Bindung hat und daher auf die[selected]
Bindung im plnkr und nicht im Coden des OP hört (siehe meine Antwort für einen Link zu einem gegabelten plnr, der diesen Effekt erklärt)selected="workout.name == 'back'"
reaktiver Formulare:[selected]=workout.name == 'back'
"
. Ich habe Ihren Code mit einer anderen Variablen wie dieser verwendet[selected]="workout.name == exercise.name"
Wenn Sie den Standardwert zuweisen
selectedWorkout
und verwenden[ngValue]
(wodurch Objekte als Wert verwendet werden können - andernfalls wird nur eine Zeichenfolge unterstützt), sollte dies genau das tun, was Sie möchten:Stellen Sie sicher, dass der Wert, dem Sie zuweisen,
selectedWorkout
dieselbe Instanz ist wie der inworkouts
. Eine andere Objektinstanz mit denselben Eigenschaften und Werten wird nicht erkannt. Es wird nur die Objektidentität überprüft.aktualisieren
Angular hat Unterstützung für hinzugefügt
compareWith
, was es einfacher macht, den Standardwert festzulegen, wenn er[ngValue]
verwendet wird (für Objektwerte).Aus den Dokumenten https://angular.io/api/forms/SelectControlValueAccessor
Auf diese Weise kann eine andere (neue) Objektinstanz als Standardwert festgelegt werden und
compareFn
wird verwendet, um herauszufinden, ob sie als gleich angesehen werden sollten (z. B. wenn dieid
Eigenschaft identisch ist.quelle
[value]
anstelle von[ngValue]
oder Ihr Code bewirkt irgendwie, dass der Wert in eine Zeichenfolge konvertiert wird.c1
undc2
anzeigen incompareFn
? Und wie funktioniert die Auswertung im Funktionskörper?selectedCountries
undcountry
Stellen Sie einfach den Wert des Modells auf den gewünschten Standardwert ein:
Ich habe hier eine Gabelung von @Douglas 'plnkr erstellt , um die verschiedenen Möglichkeiten zu demonstrieren, um das gewünschte Verhalten in angle2 zu erzielen.
quelle
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Fügen Sie diesen Code an der Position o der Auswahlliste hinzu.
<option [ngValue]="undefined" selected>Select</option>
quelle
Sie können sich folgendermaßen nähern:
oder so:
oder Sie können den Standardwert folgendermaßen festlegen:
oder
quelle
Verwenden Sie den Index, um den ersten Wert als Standard anzuzeigen
quelle
Laut https://angular.io/api/forms/SelectControlValueAccessor benötigen Sie lediglich Folgendes:
theView.html:
theComponent.ts
quelle
Ich habe ein bisschen mit diesem Problem gekämpft, aber am Ende die folgende Lösung gefunden ... vielleicht hilft es jemandem.
HTML-Vorlage:
Komponente:
quelle
Vollständige Ausarbeitung anderer Beiträge, hier ist, was in Angular2-Schnellstart funktioniert:
So legen Sie die DOM-Standardeinstellung fest:
*ngFor
Verwenden Sie zusammen mit dem Attribut<option>
's eine bedingte Anweisungselected
.So legen Sie den
Control
Standard fest: Verwenden Sie das Konstruktorargument. Andernfalls ist der Steuerwert vor einem Wechsel, wenn der Benutzer eine Option erneut auswählt, die den Wert des Steuerelements mit dem Wertattribut der ausgewählten Option festlegt, null.Skript:
Markup:
quelle
Sie können das
[ngModel]
anstelle von verwenden[(ngModel)]
und es ist in Ordnungquelle
Sie können wie oben vorgehen:
Wie Sie im obigen Code sehen können, wird das ausgewählte Attribut der Wiederholungsoption beim Überprüfen des Index der Wiederholungsschleife der Liste festgelegt. [attr. <HTML-Attributname>] wird zum Festlegen des HTML-Attributs in angle2 verwendet.
Ein anderer Ansatz besteht darin, den Modellwert in der Typoskriptdatei wie folgt festzulegen:
quelle
Fügen Sie der Antwort von @Matthijs hinzu, stellen Sie sicher, dass Ihr
select
Element einname
Attribut hat undname
es in Ihrer HTML-Vorlage eindeutig ist. Winkel 2 verwendet den Eingabenamen, um Änderungen zu aktualisieren. Wenn also doppelte Namen vorhanden sind oder dem Eingabeelement kein Name zugeordnet ist, schlägt die Bindung fehl.quelle
Fügen Sie die ausgewählte Bindungseigenschaft hinzu, stellen Sie jedoch sicher, dass sie für andere Felder null ist, z.
Jetzt wird es funktionieren
quelle
Wenn Sie ein Formular verwenden, sollte sich
name
innerhalb desselect
Tags ein Feld befinden .Alles, was Sie tun müssen, ist nur
value
dasoption
Tag hinzuzufügen .selectedWorkout
Wert sollte "zurück" sein und fertig.quelle
Wenn Sie die 2-Wege-Bindung über [(ngModel)] nicht möchten, gehen Sie folgendermaßen vor:
Gerade auf meinem Projekt auf Angular 4 getestet und es funktioniert! Die Kontenliste ist ein Array von Kontoobjekten, in denen der Name eine Eigenschaft des Kontos ist.
Interessante Beobachtung:
[ngValue] = "acct" übt das gleiche Ergebnis aus wie [ngValue] = "acct.name".
Ich weiß nicht, wie Angular 4 das schafft!
quelle
quelle
Für mich definiere ich einige Eigenschaften:
Dann im Konstruktor und ngOnInit
Und in der Vorlage füge ich dies als erste Option innerhalb des Auswahlelements hinzu
Wenn Sie die erste Option auswählen, können Sie einfach die Verwendung der Eigenschaft disabledFirstOption entfernen
quelle
In meinem Fall wird hier der
this.selectedtestSubmitResultView
Standardwert basierend auf den Bedingungen festgelegt, und eine VariabletestSubmitResultView
muss ein und dieselbe sein wietestSubmitResultView
. Das hat in der Tat bei mir funktioniertFür mehr Informationen,
quelle
Ich war zuvor mit diesem Problem konfrontiert und habe es mit verschiedenen einfachen Problemumgehungsmethoden behoben
Für Ihre Component.html
Dann können Sie in Ihrer component.ts die ausgewählte Option anhand von erkennen
quelle
funktioniert wie unten gezeigt:
quelle
Sie müssen nur das ngModel und den gewünschten Wert eingeben:
quelle