当前位置: 首页 > 知识库问答 >
问题:

为什么AngularJS包括一个空选项中选择?

诸葛煜
2023-03-14

在过去的几周里,我一直在与AngularJS合作,有一件事确实让我感到困扰,那就是即使在尝试了所有的排列或规范中定义的配置之后http://docs.angularjs.org/api/ng.directive:select,我仍然得到一个空选项作为select元素的第一个子元素。

这是翡翠:

select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');

这里的控制器:

$scope.typeOptions = [
    { name: 'Feature', value: 'feature' },
    { name: 'Bug', value: 'bug' },
    { name: 'Enhancement', value: 'enhancement' }
];

最后,这里是生成的HTML:

<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
    <option value="?" selected="selected"></option>
    <option value="0">Feature</option>
    <option value="1">Bug</option>
    <option value="2">Enhancement</option>
</select>

我需要怎么做才能摆脱它?

注意:没有这个东西也可以工作,但是如果你使用select2而不使用多个选项,那看起来很奇怪。

共有3个答案

蒲坚
2023-03-14

有棱角的

对于任何将null视为其中一个选项的有效值的人(所以想象一下null是下面示例中typeOptions中的一个项的值),我发现确保自动添加的选项被隐藏的最简单方法是使用ng-if

<select ng-options="option.value as option.name for option in typeOptions">
    <option value="" ng-if="false"></option>
</select>

为什么ng如果而不是ng隐藏?因为您希望css选择器以上面的第一个选项为目标,选择以“真实”选项为目标,而不是隐藏的选项。当您使用量角器进行e2e测试以及(出于任何原因)使用by.css()以选择选项为目标时,它非常有用。

有棱角的

由于select和options指令的重构,如果不再可行,则使用ng,因此您必须转到ng show=“false”,使其再次工作。

陆昕
2023-03-14

如果需要初始值,请参阅@pkozlowski.opensource的答案,供参考,该答案也可以使用ng init在视图(而不是控制器)中实现:

<select ng-model="form.type" required="required" ng-init="form.type='bug'"
  ng-options="option.value as option.name for option in typeOptions" >
</select>

如果您不想要初始值,“可以将值设置为空字符串的单个硬编码元素嵌套到元素中。然后,此元素将表示null或"未选择"选项":

<select ng-model="form.type" required="required"
  ng-options="option.value as option.name for option in typeOptions" >
    <option style="display:none" value="">select a type</option>
</select>
殳飞扬
2023-03-14

当传递给ng options的一组选项中不存在ng model引用的值时,将生成空的选项。这样做是为了防止意外的模型选择:AngularJS可以看到初始模型未定义或不在选项集中,并且不想自己决定模型值。

如果要取消空选项,只需在控制器中选择一个初始值,如:

$scope.form.type = $scope.typeOptions[0].value;

以下是JSFIDLE:http://jsfiddle.net/MTfRD/3/

简而言之:空选项意味着没有选择有效的模型(我的意思是:从选项集中)。您需要选择一个有效的模型值来删除此空选项。

 类似资料:
  • 问题内容: 在过去的几周里,我一直在使用AngularJS,而真正困扰我的一件事是,即使尝试了所有置换或http://docs.angularjs.org/api/ng规范中定义的配置,.directive:select,我仍然得到一个空选项作为select元素的第一个子元素。 这是玉: 这里的控制器: 最后,这是生成的HTML: 我需要怎么做才能摆脱它? PS:事情也不需要这样做,但是如果您使用

  • 问题内容: 所以,我想用香草JS做的事情很简单,但是我使用的是AngularJS,我想知道如何在框架内以最佳方式做到这一点。我想在多个选择框中更新所选的选项。我不想添加或删除任何选项。这是我的HTML外观: 使用以下数组,我想以编程方式从此列表中选择/取消选择选项: 当我在范围中设置此数组时,我希望选择框取消选择不是蓝色或红色的任何内容,然后选择蓝色和红色。我在Google网上论坛上看到的标准回复

  • 问题内容: 我是AngularJS的新手。我进行了很多搜索,但是并不能解决我的问题。 我第一次在选择框中得到一个空白选项。 这是我的HTML代码 JS 但这似乎不起作用。我该如何解决?这是JSFiddle演示 问题答案: 当传递给的一组选项中不存在被引用的值时,将生成空值。这样做是为了防止意外选择模型:AngularJS可以看到初始模型是未定义的还是未在选项集中,并且不想自行决定模型的值。 简而言

  • 问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要

  • 问题内容: 我想在proc的WHERE部分中创建一个具有可选参数的存储proc。我的C#代码可以为此过程传入null或有效的产品ID。这里是: 此代码无效。如果产品ID为null,我希望它仅查找名称为“ Hasbro”的产品。如果产品ID不为null,则希望它查找其中名称为“ Hasbro”的产品,并寻找匹配的产品ID。 谢谢! 更新: 这是工作代码。谢谢大家帮助我! 问题答案: 这也应该工作…

  • 问题内容: 我有一个很奇怪的要求,其中要求我默认在HTML的下拉菜单中没有选择任何选项。然而, 我不能用这个 因为,为此,我将必须进行验证以处理第一个选项。有人可以在没有将第一个选项作为select标签的一部分的情况下帮助我实现此目标吗? 问题答案: 也许这会有所帮助 将默认显示。但是,如果您选择一个选项,则将无法再次选择它。 您也可以通过添加一个空白来隐藏它 因此它将不再显示在列表中。 选项2