Angularjs 角度不验证表单选择

Angularjs 角度不验证表单选择,angularjs,html,validation,select,Angularjs,Html,Validation,Select,我是新手,所以请容忍我。我有一个带有下拉列表,文本框和按钮的表单。用户必须从dropbox中选择一个选项,并在文本框中输入一个值,表单才会生效 <form name='personDataSourceForm' novalidate ng-submit='personDataSourceForm.$valid && PersonCtrl.SaveDataItem()'> <span>Invalid: {{personDataSourceForm.$

我是新手,所以请容忍我。我有一个带有
下拉列表
文本框
按钮的表单。用户必须从dropbox中选择一个选项,并在文本框中输入一个值,表单才会生效

<form name='personDataSourceForm' novalidate ng-submit='personDataSourceForm.$valid && PersonCtrl.SaveDataItem()'>
    <span>Invalid: {{personDataSourceForm.$invalid}}</span><br />
    <span>valid: {{personDataSourceForm.$valid}}</span>
    <div class="input-group">
        <div class="input-group-addon">
            <select class="form-control input-sm" required ng-model='PersonCtrl.sp.person.newItem.dataType' ng-options='opt as opt.text group by opt.dataType for opt in PersonCtrl.DataItemTypes'>
                <option value="" disabled selected>Choose...</option>
            </select>
        </div>
        <input type="text" class="form-control input-sm" ng-model='PersonCtrl.sp.person.newItem.value' required>
        <div class="input-group-btn">
            <button class="btn btn-default btn-sm" ng-class="{ 'btn-success' : PersonCtrl.sp.person.newItem.dataType.dataType && PersonCtrl.sp.person.newItem.value }" type="submit">Save</button>
            <button class="btn btn-link btn-sm" type="button" ng-click="PersonCtrl.StopAddItem()">Cancel</button></div>
    </div>
</form>

无效:{{personDataSourceForm.$Invalid}}
有效:{{personDataSourceForm.$valid}} 选择。。。 拯救 取消
我很快添加了两个跨度来显示验证状态。当两者都为空时,表单显示
无效
,这很有意义

一旦我在文本框中输入了一个值,那么表单就会突然生效,即使
下拉列表仍然没有更改。

为什么我的
下拉列表未得到验证?我甚至尝试过这个解决方案

我最初的想法是您已经选择了默认值:

<option value="" selected>Choose...</option>
选择。。。

因此,从技术上讲,它的值为“”,满足了要求

我想你需要看看
PersonCtrl.sp.person.newItem
。当
数据类型
都变为实数时,该表单生效。我的猜测是,该项始终具有其
数据类型且有效,因此当输入新值时,整个表单将变为有效。

为什么您的
选择
ad
input
不具有
name
属性?
name
属性是表单验证正常工作所必需的。 我认为,
form
为每个输入组件创建了一个
name->validity
的映射,可能是您忽略了它,它们都(
select
input
)映射到同一个validity对象。如果是这种情况,那么任何人都有效,有效地使另一人的状态也有效,因此他们都有效,表单也有效。
请为它们添加单独的名称,并查看问题是否得到解决。我上面的观点是一个很强的猜测,我没有深入到角度代码来检查
ng form
的行为。

更新我发布到测试中的代码,但这不起作用,因为我无法重现您的问题。你能在小提琴中重现同样的问题并分享吗?编辑:当我将
selected
更改为
ng selected=“selected”
时,问题似乎得到了解决。仍然试图理解为什么..ng selected=“selected”就像从选项中删除selected一样,因为变量
selected
将被解析为
false
,如果您不在范围内。谢谢。我还是在想这件事。因此,如果我想确保用户选择的不是第一个默认选项,那么我可以将
ng selected
保留在那里,如果没有选择任何选项,它应该始终返回false?只要您的选项的值为=“如果用户选择该选项,您的表单应该无效。所以最好像
选择…
那样使用它。我甚至用name属性也试过了,但它不起作用,我也弄不明白。最终起作用的是使用
ng select