2016-03-31 54 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);