我想使用select在这里设置一个布尔值为true或false,这是我的代码:
<select class="span9" ng-model="proposal.formalStoryboard">
<option value="false">Not Included</option>
<option value="true">Included</option>
</select>
值(proposal.formalStoryboard)已正确设置为true或false ,但在已分配值时,更改不会反映在选择框中。
我试过ng-value =&#34; true&#34;和ng-value =&#34; false&#34;而不只是价值,但它不能正常工作。
答案 0 :(得分:79)
编辑:评论员指出我原来的解决方案并不像声称的那样有效。我已经更新了答案,以反映下面其他人给出的正确答案(我无法删除已接受的答案)。
对于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>
这个JavaScript:
function MyCntrl($scope) {
$scope.mybool = true;
}
答案 1 :(得分:58)
就这样做:
<select ng-model="someModel" ng-options="boolToStr(item) for item in [true, false]">
</select>
并定义:
$scope.boolToStr = function(arg) {return arg ? 'Included' : 'Not included'};
答案 2 :(得分:32)
为什么不直接使用它?
<select class="form-control" ng-options="(item?'Included':'Not Included') for item in [true, false]"></select>
答案 3 :(得分:3)
我不确定支持哪种版本的角度,但您现在可以在选项元素上使用ng-value
。你的htmls会这样工作。
<select ng-model="proposal.formalStoryboard">
<option ng-value="true">Included</option>
<option ng-value="false">Not Included</option>
</select>
它也适用于收音机和复选框。
答案 4 :(得分:1)
我为您创建了样本,请检查this。
你想用模型来驱动ui绑定吗?
<div ng-app ng-controller="Ctrl">
<select class="span9" ng-model="proposal.formalStoryboard">
<option value="false">Not Included</option>
<option value="true">Included</option>
</select>
<button ng-click="changeValue();">Click</button>
<div>
function Ctrl($scope) {
$scope.proposal = {};
$scope.proposal.formalStoryboard = true;
$scope.changeValue = function () {
$scope.proposal.formalStoryboard = !$scope.proposal.formalStoryboard;
console.log($scope.proposal.formalStoryboard);
}
}
答案 5 :(得分:1)
我建议使用指令。像往常一样,我试图远离超时和其他异步操作,而不是更权威和直接的控制。
directives.directive('boolean', function() {
return {
priority: '50',
require: 'ngModel',
link: function(_, __, ___, ngModel) {
ngModel.$parsers.push(function(value) {
return value == 'true' || value == true;
});
ngModel.$formatters.push(function(value) {
return value && value != 'false' ? 'true' : 'false';
});
}
};
});
优先级是专门设置的,以便在任何其他指令之前完成(通常没有设置优先级,默认为0
)
例如,我使用这个指令(用于真/假选择)和我的selectpicker
指令,该指令包含select
引导程序插件中的selectpicker
个元素。
编辑:
这里需要注意的是,你的html值必须是字符串值。该指令的作用是在视图和模型之间进行转换,将模型值保持在boolean
,将视图保持为string
格式:
%select.selectpicker{ ng: { model: 'modelForm.listed' }, selectpicker: '{ }', boolean: true }
%option{ value: 'true' } Listed
%option{ value: 'false' } Unlisted
答案 6 :(得分:1)
这也会奏效。只需在值中加入一个角度表达式,就可以强制该值为布尔值。
<select class="span9" ng-model="proposal.formalStoryboard">
<option value="{{false}}"
ng-selected="proposal.formalStoryboard === false">
Not Included
</option>
<option value="{{true}}"
ng-selected="proposal.formalStoryboard === true">
Included
</option>
</select>
答案 7 :(得分:0)
我在这个令人沮丧的问题上取得的成功很少。我的解决方案,虽然不是太优雅,因为它是一个额外的代码行,每次都解决它。这可能不适用于所有应用程序。
$scope.myObject.myBooleanProperty = $scope.myObject.myBooleanProperty.toString();
在尝试将其重新绑定到页面上显示的模型之前将其转换为“真实”字符串,这样就可以正确选择该值。
答案 8 :(得分:0)
Angular对值绑定到ng-model和给定选项中的值之间进行了严格的比较。初始问题中给出的值是字符串&#34; false&#34;和&#34;真&#34;。 如果ng-model的值是类型bool并且定义为{&#34; Value&#34;:false},则字符串和bool之间的Angulars strict === comparsion永远不会匹配,因此select-box为空。
真正的问题是 - 如果选择一个值,则类型从bool更改为字符串({&#34;值&#34;:false} - &gt; {&#34;值&#34;:&# 34; false&#34;})如果回发可能会导致错误。
这两个问题的最佳解决方案是本帖子中的Thiago Passos。 (https://stackoverflow.com/a/31636437/6319374)
答案 9 :(得分:-3)
<script type='text/javascript'>
function MyCntrl($scope) {<!--from ww w . j a v a 2s. c om-->
$scope.mybool = true;
}
</script>
</head>
<body>
<div ng-app="">
<div ng-controller="MyCntrl">
<select ng-model="mybool">
<option value="false">Not Included</option>
<option value="true">Included</option>
</select>
<p>
Currently selected: {{ mybool }}
</p>
</div>
</div>
</body>
</html>