2016-03-21 3 views
0

Ich habe zwei Auswahlfelder, eines für Monat und einen für Tag (Controller als Name ‚contactDetails‘ ist):

<select 
    data-ng-model="contactDetails.contactBasicInfo.bdmonth" 
    data-ng-options="bdMonth.key as bdMonth.value for bdMonth in contactDetails.months"> 
    <option value="">Month</option> 
</select> 
<select 
    data-ng-model="contactDetails.contactBasicInfo.bdday" 
    data-ng-options="bdDay.key as bdDay.value for bdDay in contactDetails.days"> 
    <option value="">Day</option> 
</select> 

Diese Ausgabe der wählt gut aus und ich kann sie verwenden, um Informationen in der Datenbank zu speichern. Keine Probleme dort. Das Problem ist, wenn ich die Informationen aus der Datenbank zurückziehen und die Auswahlfelder aktualisieren soll, um die Werte aus der Datenbank widerzuspiegeln. Sie nicht. Wenn ich die Werte fest im Controller festlege, werden sie aktualisiert, aber nicht, wenn die Werte nach einem $ http-Aufruf zugewiesen werden.

Ich habe dies an der Oberseite des Controllers die Standardeinstellungen einzurichten:

ctrl.contactBasicInfo.bdmonth = 0; 
ctrl.contactBasicInfo.bdday = 0; 

Und später rufe ich eine Funktion, die dann Werte für diese beiden Variablen zuweist:

ctrl.contactBasicInfo = data.contactInfo.contactBasicInfo; 

Alle anderen Daten, die aus data.contactInfo.contactBasicInfo kommt funktioniert und die Felder aktualisieren, wie Vorname, Telefon, E-Mail, etc. Wenn ich die Modelle in den HTML-Code wie {{ctrl.contactBasicInfo.bdmonth}} platzieren, wird es die richtigen Werte zeigen. Ich weiß, dass die Werte vom $ http-Aufruf korrekt zurückkommen. Die Auswahlen ändern sich nicht, um die neuen Werte wiederzugeben.

Irgendwelche Ideen, die ich vermisse?

Danke!

+0

möglich Duplikat: http://stackoverflow.com/questions/19872387/in-angularjs-how-do-you-get-a-select-to-refresh-when-the-array-for-ng-options – JanR

+0

Würde 'track by' in diesem Fall helfen? – Lex

+0

@JanR Ich denke nicht, dass wir über dasselbe reden. Das Array, das die Auswahl erstellt, ändert sich nie, nur der ausgewählte Wert. – Mattaton

Antwort

0

Es ist, weil die Richtlinie ngModel für ein <select> Element den === Vergleich beim Binden verwendet. Daher wird 0 === '0' false zurückgeben. Daher sollten Sie Ihrem ngModel, der an das Dropdown-Menü angehängt ist, eine Zeichenfolge zuweisen, die keine Zahl/Ganzzahl ist.

+0

Also, welchen Wert verwende ich für den Tag des Monats außer einer Zahl? Wie gesagt, wenn ich für den Standardwert bdmonth den Wert = 0 auf = 3 ändere, wechselt die Auswahl auf März. Aber wenn das http zurückgibt und den Wert auf 3 setzt, tut es nichts. Also Zahlen für die Werte funktionieren, oder? Oder sagst du, dass ich nur die Zahl um die Zahl herum setzen muss? – Mattaton

+0

Verwenden Sie die javascript toString() - Funktion für Ihre Ganzzahl, die vom $ http-Aufruf zurückgegeben wird. – amcpanaligan

+0

Gotcha. Ich gebe das eine Chance. Vielen Dank. – Mattaton

Verwandte Themen