2016-06-13 2 views
0

Aktualisierung Ich habe Daten wie folgt aus:ng-Optionen Hinzufügen "string" in Wert und nicht ng-Modell

"RequirementLevels": { 
"285960000":"Black", 
"285960001":"Green", 
"285960002":"Blue", 
"285960003":"Purple" 
} 

Und ich habe eine Auswahl wie folgt aus:

<select ng-options="key as value for (key , value) in Variables.Template.RequirementLevels" 
     ng-model="Variables.EditingNode.RequirementLevel" 
     ng-model-options="{ debounce: 300 }"></select> 
<span>"{{Variables.EditingNode.RequirementLevel}}"</span> 

Dies erzeugt die folgenden html: enter image description here

Beachten Sie die string: vor jedem Wert in den Auswahloptionen. Mit dem folgenden Code bekomme ich nicht string: in den Wert.

<select ng-model="Variables.EditingNode.RequirementLevel"> 
    <option ng-repeat="(key, value) in Variables.Template.RequirementLevels" value="{{key}}">{{value}}</option> 
</select> 

Meine Frage ist, warum bekomme ich die string: im ng-Optionsliste und wie kann ich es weg.

Update wegen der Kommentare: Der Grund, warum ich das ändern möchte, ist, weil der ng-Modellwert nicht funktioniert, wenn der Wert string: darin hat. Ich nehme an, dies ist, weil es "string: 123" nicht in der Option übereinstimmt, die mit "123" vom Modell eingestellt wird.

Update 2

Dies ist der HTML-Code, die Auswahl erstellt.

<div class="form-group input-group"> 
    <label for="ReviewDone">Requirement level</label> 
    <select ng-options="key as value for (key , value) in Variables.Template.RequirementLevels track by key" 
      ng-model="Variables.EditingNode.RequirementLevel" 
      ng-model-options="{ debounce: 300 }"></select> 
    <span>"{{Variables.EditingNode.RequirementLevel}}"</span> 
</div> 

Dies erstellt die Auswahl mit den Optionen, wählt aber keinen Standardwert. Der Bereich darunter, der den Inhalt der ng-Modellvariable anzeigt, funktioniert jedoch einwandfrei und gibt die Zahl "285960002" aus, die in der Liste der Optionen enthalten ist. Daher sollte sie aus der Liste ausgewählt werden, um damit zu beginnen.

Der obige Code erzeugt HTML:

<div class="form-group input-group"> 
    <label for="ReviewDone">Requirement level</label> 
    <select class="ng-pristine ng-untouched ng-valid" ng-model="Variables.EditingNode.RequirementLevel" ng-model-options="{ debounce: 300 }" ng-options="key as value for (key , value) in Variables.Template.RequirementLevels track by key"><option selected="selected" value="?"></option><option value="285960000" label="Black">Black</option><option value="285960001" label="Green">Green</option><option value="285960002" label="Blue">Blue</option><option value="285960003" label="Purple">Purple</option></select> 
    <span class="ng-binding">"285960002"</span> 
</div> 

auch einen anderen Wert in der Auswahl ändert den Wert in der Spanne der Auswahl, so dass er den Wert aktualisiert, aber nicht zu lesen, wenn es lädt.

+0

http://stackoverflow.com/questions/37706606/angular-ng-options-broken-1-4 – Claies

+1

Die Werte, die Sie sehen, sind der Hash-Schlüssel für das Element. Dies ist normales Verhalten für angulare 'ng-Optionen', und Ihre Anwendungslogik sollte nicht betroffen sein, da sie den an 'ng-model' zurückgegebenen Wert nicht ändert. – Claies

+0

@Claies: Siehe Update zu Frage: Ich glaube, der ng-Modell Wert funktioniert nicht richtig mit dem String Teil vorhanden. – JensB

Antwort

3

Wenn Sie möchten, dass diese zusätzliche Zeichenfolge verschwindet, wie Sie gefragt haben, dann verwenden Sie Spur für Schlüssel.

<select ng-options="key as value for (key , value) in Variables.Template.RequirementLevels track by key" 

Siehe Plunker Referenz

http://plnkr.co/edit/fi8lLyjkS0y3hfX7aeNI?p=preview

+3

möchten Sie wahrscheinlich "nach Schlüssel" verfolgen, nicht "Wert"; 'Spur nach Wert 'bewirkt, dass das Dropdown-Feld die Auswahl ausblendet. – Claies

+0

@Claies Aye, ich habe versucht Track für Schlüssel und es hat die Zeichenfolge entfernt :, aber das Problem, das ich beheben wollte, ist immer noch da, wie Sie sagten, es wäre. – JensB

+0

was ist das problem ?? Danke @Claies für den Hinweis, dass ich das in der Post korrigiert habe. – Deep

Verwandte Themen