2016-03-31 6 views
2

Ich bin neu in AngularJS. Ich habe eine sehr einfache Aufgabe: Wählen Sie einen Integer-Wert mit Winkel mit einem HTML-Code <select>.AngularJS Select Integer-Wert mit HTML-Select-Tag

<select ng-model="foo.bar"> 
    <option ng-repeat="option in options" value="{{option}}">{{option}}</option> 
</select> 

foo.bar enthält einen ganzzahligen Wert. Wenn ich den obigen Code ausführe, lautet die erste generierte Option: <option value="? number:32 ?"></option>. Ich habe herausgefunden, dass der ausgewählte Wert als String interpretiert wird. Ich möchte einen Integer.

Ich habe einige mögliche Lösungen gefunden, aber sie sind entweder komplex (wie die), oder ihre options Array sieht anders aus (meins ist nur ein einfaches Array von ganzen Zahlen).

+2

Wählen Sie wird Ihnen eine Zeichenfolge geben Sie müssen nur diesen Wert in Zahl wie Zahl (Wert) konvertieren –

+0

Also, wo kann ich diese Umwandlung machen? – ehannes

+0

In Ihrem Controller –

Antwort

3

Statt dem Tag option mit ng-repeat kombiniert sollten Sie Verwenden Sie Angulars ng-options directive wie folgt:

<select ng-model="foo.bar" ng-options="option for option in options"></select> 

Wenn options ein Array von ganzen Zahlen ist, sollte ng-model auch eine ganze Zahl enthalten.

+2

Beachten Sie, dass [ngOptions] (https://docs.angularjs.org/api/ng/directive/ngOptions) erwartete Ausdrücke wie '_select_ (als _label_) aussehen müssen? für (_key _,)? _ value_ in_collection_'. Ändere 'ng-Optionen' in' Option für Option in Optionen' und es würde funktionieren. –

+0

Große Antwort! Keine Notwendigkeit, die ganze Zahl im Controller zu analysieren! :) Ich habe versucht, etwas Ähnliches zu machen, aber ich konnte den 'ng-Optionen'-Teil nicht richtig bekommen. – ehannes

+0

@CosminAbabei Sie haben Recht! Danke für das Aufzeigen –

0

Wählen Sie wird Ihnen eine Zeichenfolge geben. Sie müssen diese Zeichenfolge in eine Nummer in Ihrem Controller-Code konvertieren.

Möglicherweise müssen Sie eine Uhr verwenden, um nach Änderungen in Ihrer foo.bar-Variablen zu suchen, und sie dann zu Integer analysieren.

Werfen Sie einen Blick auf https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope und suchen Sie nach $ watch.

+0

Warum gibt es eine Notwendigkeit für unnötige $ watch? –

+0

Wenn er foo.bar in einem anderen Teil seines Codes verwenden will, muss er es zur Digest-Zeit in eine Ganzzahl zerlegen. – Hoijof

+0

Warum die Ganzzahl explizit analysieren, wenn Sie 'ng-Optionen' verwenden können, wie Freddy es vorgeschlagen hat? – ehannes

0

Select Dropdown werden Sie String-Wert immer geben, wenn Sie es wollen, dass es eine ganze Zahl verdeckte sein in Controller

-Controller -

var numValue = Number(foo.bar); 
Verwandte Themen