选择框中的Angular,boolean值

Jer*_*sia 65 javascript boolean angularjs

我想使用select将boolean值设置为true或false这是我的代码:

<select class="span9" ng-model="proposal.formalStoryboard">
<option value="false">Not Included</option>
<option value="true">Included</option>
</select>
Run Code Online (Sandbox Code Playgroud)

值(proposal.formalStoryboard)已正确设置为true或false,但在已分配值时,更改不会反映在选择框中.

我尝试了ng-value ="true"和ng-value ="false"而不仅仅是值,但它不能正常工作.

Chr*_*isP 82

编辑:评论家指出,我原来的解决方案并没有像声称的那样工作.我已经更新了答案,以反映下面其他人给出的正确答案(我不能删除已接受的答案).

对于Angular 1.0.6,请考虑以下HTML:

<div ng-app="">
  <div ng-controller="MyCntrl">
    <select ng-model="mybool"
            ng-options="o.v as o.n for o in [{ n: 'Not included', v: false }, { n: 'Included', v: true }]">
    </select>
    <p>
        Currently selected: <b>{{ mybool }}</b> opposite: {{ !mybool }}
   </p> 
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这个JavaScript:

function MyCntrl($scope) {
    $scope.mybool = true;
}
Run Code Online (Sandbox Code Playgroud)

这是一个工作DEMO的角度1.0.6,这里是一个工作DEMO的角度1.3.14,这是稍有不同.

  • 这实际上不起作用.我已经更新了你的jsfiddle以显示反转:http://jsfiddle.net/jGfL5/14/这实际上将值设置为字符串"true"或字符串"false",它们都评估为truthy. (3认同)

小智 58

就这样做:

<select ng-model="someModel" ng-options="boolToStr(item) for item in [true, false]">
</select>
Run Code Online (Sandbox Code Playgroud)

并定义:

$scope.boolToStr = function(arg) {return arg ? 'Included' : 'Not included'};
Run Code Online (Sandbox Code Playgroud)

  • 为了避免定义boolToStr,我在[{n:'不',v:false},{n:'是',v:true}]中使用了ng-options ="ov as on o" (24认同)

Thi*_*sos 32

为什么不用这个呢?

<select class="form-control" ng-options="(item?'Included':'Not Included') for item in [true, false]"></select>
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.根据需要在模型中存储布尔值(不是字符串),并且全部在一行中.实际上不需要指令或辅助函数. (2认同)

Kie*_*ran 7

我不确定它支持哪个版本的angular,但是您现在可以使用ng-valueon选项元素。您的html可以这样工作。

<select ng-model="proposal.formalStoryboard">
    <option ng-value="true">Included</option>
    <option ng-value="false">Not Included</option>
</select>
Run Code Online (Sandbox Code Playgroud)

它还适用于收音机和复选框。

  • 这是最简单的答案。截至2018年6月确认 (2认同)
  • 这应该被接受,或者至少是得票最多的答案! (2认同)