Javascript AngularJS-ng选项下拉列表选择False时未设置ng模型值

Javascript AngularJS-ng选项下拉列表选择False时未设置ng模型值,javascript,html,angularjs,ng-options,angularjs-forms,Javascript,Html,Angularjs,Ng Options,Angularjs Forms,我有一个元素,它使用ng options生成选择列表,并希望将所选设置为ng model的值。这是我的html: <td style="text-align:center"> <ng-form name="IsTobaccoForm"> <select name="Input" required ng-model="dep.IsTobacco" ng-options="item.value as item.text for item in y

我有一个
元素,它使用
ng options
生成选择列表,并希望将所选设置为
ng model
的值。这是我的html:

<td style="text-align:center">
    <ng-form name="IsTobaccoForm">
        <select name="Input" required ng-model="dep.IsTobacco" ng-options="item.value as item.text for item in yesNoList"></select>{{dep.IsTobacco}}
        <span class="alert-error" ng-show="IsTobaccoForm.Input.$error.required"><strong>*Required</strong></span>
    </ng-form>
</td>
如果项目的
istobaco
值为真,则该值设置正确,一切正常。但是,如果为false,则会出现所需的错误,即使
{{{dep.istobaco}}
呈现为false。真正奇怪的是,如果我将列表中的选定项更改为true,它可以正常工作,但是如果我将其设置为false,则会向列表中添加一个新的空白项并选中该空白项

如果问题似乎不在上面发布的行中,我很乐意发布更多代码

谢谢

编辑:我还使用了chrome调试器,发现当数据以角度启动时,
istobaco
的值等于
false


编辑2:如果有人对AngularJS不熟悉,我绝对推荐阅读以下两篇文章:&。它们是AngularJS表单的概述。

发生这种情况的原因是
false
值在与
required
一起使用时被解释为缺少
ngModel
。如所讨论的,考虑这个角度源的摘录:

var validator = function(value) {
    if (attr.required && (isEmpty(value) || value === false)) {
        ctrl.$setValidity('required', false);
如果存在必需属性且其值为
false
,则该属性不会通过验证。这可能是为了更容易地验证所需的复选框,在这种情况下,unchecked的默认值为
false

考虑到复选框可以接受
ng true value
ng false value
属性,可能不需要这样做,但我想要么这样做,要么在每个复选框上强制使用非
true
和非
false
属性,这是更好的选择


一种解决方法是使用字符串“true”和“false”。

由于某种原因(可能与复选框有关?),值
false
在与
required
-一起使用时被解释为缺少
ngModel
。一种解决方法是使用字符串“true”和“false”。@sh0ber-oh-man。那不好,哈哈。谢谢你提供这方面的信息。我一直在强迫自己不要想出一个解决办法,假设是我缺乏角度知识导致了这个问题。没问题,我自己没有意识到这一点。考虑到复选框可以包含
ng true value
ng false value
属性,可能不需要这样做。但我想要么是这样,要么在每个复选框上强制使用非真和非假属性值,这是更好的选择。是的,这绝对有意义。我在使用带有复选框的
ng选项时没有考虑到后果。现在作为答案发布:)sh0ber已经提到了复选框的使用,但我觉得这应该进一步强调。我将代码改为“是”和“否”,然后意识到我在不需要的时候进行黑客攻击。使用复选框。
var validator = function(value) {
    if (attr.required && (isEmpty(value) || value === false)) {
        ctrl.$setValidity('required', false);