2016-03-31 83 views
2

我是AngularJS的新手。我有一個非常簡單的任務:使用HTML <select>標記以角度選擇一個整數值。AngularJS用HTML選擇標記選擇整數值

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

foo.bar包含一個整數值。當我運行上面的代碼時,第一個生成的選項是:<option value="? number:32 ?"></option>。我發現選定的值被解釋爲一個字符串。我想要一個整數。

我發現了一些可能的解決方案,但它們要麼複雜(如documentation example to implement a convert-to-number-function),要麼它們的options數組看起來不同(我的只是一個簡單的整數數組)。

+2

選擇會給你一個字符串,只有你必須將該值轉換爲數字(值) –

+0

那麼我可以在哪裏進行轉換? – ehannes

+0

在你的控制器中 –

回答

3

取而代之的是option標籤與ng-repeat相結合的你應該使用angulars ng-options directive這樣的:

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

如果options是一個整數數組,ng-model也應該包含一個整數。

+2

請注意[ngOptions](https://docs.angularjs.org/api/ng/directive/ngOptions)期望的表達式必須看起來像'_select_(as _label_)?爲(_key _,)?__收藏_collection_'。將'ng-options'改爲'Options'選項,它就可以工作。 –

+0

很好的答案!無需解析控制器中的整數! :)我試圖做類似的事情,但我無法得到正確的「ng-options」部分。 – ehannes

+0

@CosminAbabei你是對的!感謝您指出 –

0

選擇會給你一個字符串。您必須將該字符串轉換爲控制器代碼中的數字。

foo.bar = parseInt(foo.bar); 

您可能需要使用手錶才能在foo.bar變量中查找更改,然後將其解析爲整數。

看看https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope並搜索$ watch。

+0

爲什麼需要不必要的$ watch? –

+0

因爲如果他想在他的代碼的另一部分中使用foo.bar,他將需要在摘要時將其解析爲整數 – Hoijof

+0

爲什麼當您可以使用'ng-options'作爲Freddy建議時顯式解析整數? – ehannes

0

選擇下拉總會給你的字符串值,如果你希望它是一個整數隱蔽其在控制器

控制器 -

var numValue = Number(foo.bar);