当前位置: 首页 > 面试题库 >

设置模型值时,Angular将奇怪的选项添加到选择元素中

吴高洁
2023-03-14
问题内容

我有这样定义的选择元素:

<select name="country_id" id="country_id" required="required" ng-model="newAddressForm.country_id">
    <option value="">Select Country</option>
    <option ng-repeat="country in countries" value="{{country.id}}">{{country.name}}</option>
</select>

当我未在包含此选择元素的指令中未设置任何类型的值时,所有方法都可以正常工作。但是,当我执行类似的操作时newAddressForm.country_id = 98,Angular会在select元素的顶部注入一个新值,而不是选择值为98的选项:

<option value="? string:98 ?"></option>

是什么赋予了?这是哪种格式,为什么会发生?请注意,如果我console.log(newAddressForm.country_id)在指令中执行,我会得到一个normal
"98",它只是在生成的HTML中很奇怪。

编辑: 情况更新。 切换为使用ng-select,但问题仍然存在。

但是,奇怪的元素不再出现,但是,顶部还有另一个元素,该元素只有一个问号?作为值,而没有标签。

根据我的收集,这就是Angular的"none selected"选择。我仍然不明白为什么它不会选择我告诉它选择的选项。

这样做newAddressForm.country_id = 98仍然没有结果。这是为什么?


问题答案:

Angular不会将select元素的值设置为数组的实际值,而是做了一些内部操作来管理作用域绑定。在此链接上查看Mark Rajcok的第一条评论:

https://docs.angularjs.org/api/ng/directive/select#overview

当用户选择选项之一时,Angular使用索引(或键)在数组(或对象)中查找值-
查找值就是模型所设置的值。(因此,未将模型设置为您在HTML中看到的值!这会引起很多混乱。)

我不完全确定使用ng-repeat“最佳”选择。



 类似资料:
  • 问题内容: 摆弄相关代码:http : //jsfiddle.net/gFCzV/7/ 我试图设置绑定到ng-repeat中引用的对象的子级集合的下拉列表的选定值。我不知道如何设置选定的选项,因为我无法以任何我知道的方式引用它所绑定的集合。 HTML : JS : 这是我实际上应该在模型上将ng-init与SelectedIndex一起使用的一种情况吗? 问题答案: 如果使用AngularJS 1

  • 问题内容: 我想将select元素绑定到对象列表-这很容易: 在这种情况下,似乎是一个数字-所选项目的ID。 但是,我实际上想绑定到country对象本身,所以它是对象,而不仅仅是id。我试图像这样更改选项的值: 但这似乎不起作用。它似乎在我的对象中放置了一个对象,但是没有放置我期望的对象。您可以在我的Plunker示例中看到这一点。 我还尝试绑定到change事件,以便可以根据所选的id自己设置

  • 问题内容: 这是我的HTML: 我想仅使用CSS将产品名称(即“ Product1”,“ Product2”等)加粗,并将其类别(即电子,体育等)斜体化。我发现一个老问题,提到无法使用HTML和CSS,但希望现在有解决方案。 问题答案: 只有少数样式属性可以应用于元素。 这是因为这种类型的元素是“已替换元素”的示例。它们与操作系统有关,不属于HTML /浏览器。无法通过设置样式。 有更换插件/库看

  • 问题内容: 我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它: 与 但这是行不通的。有任何想法吗? 问题答案: 这绝对应该工作。确保已将代码放入:

  • 我想创建一个列表视图,只能通过鼠标进行多项选择(不按住ctrl或Shift) 单击某个项目应选择此项目。如果选择了其他项目,请将此新项目添加到所选列表中。以前选中此项目时,请取消选中它。 我不想保留选定的项目。selectionModel上有一个名为“selectIndices()”的方法,它只接受一个或多个整数,而不是整数列表。。。 有男孩有主意吗?

  • 我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。 我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。 JS(Coffeescript)代码段: 最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug): 在本例中,儿童