You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ng-repeat的Angular select无法获取选项id问题咨询

问题分析与解决方案

首先得明确:你遇到的问题不是需要对ng-model做过滤,核心原因是HTML原生的value属性只能存储字符串类型的值,当你用value="{{option}}"绑定整个对象时,浏览器会把对象自动转成"[object Object]"这样的字符串,所以你的ng-model拿到的只是这个字符串,自然没法获取到对象里的id字段。

下面给你几个可行的解决思路:

1. 优先使用ng-options(官方推荐)

Angular专门为<select>提供了ng-options指令,它就是用来处理对象/数组绑定场景的,能直接把整个选项对象绑定到ng-model,完全避免字符串转换的问题。写法大概是这样:

<select name="repeatSelect" id="repeatSelect" ng-model="data.model" 
        ng-options="option as option.name for option in data.availableOptions">
</select>

这样data.model会直接存储选中的完整option对象,你可以直接访问data.model.id,完全不用额外处理。

2. 坚持用ng-repeat的话,有两种修正方式

方式一:绑定option.id到value

就像你提到的可行示例那样,把value绑定到对象的id字段:

<option ng-repeat="option in data.availableOptions" value="{{option.id}}">
  {{option.name}}
</option>

这时ng-model会存储选中的id值,如果你需要获取完整的对象,可以通过data.availableOptions数组,根据id去匹配对应的对象。

方式二:用ng-value代替原生value

Angular的ng-value指令支持绑定非字符串类型的值(比如对象),不会被浏览器转成字符串。把代码改成这样:

<option ng-repeat="option in data.availableOptions" ng-value="option">
  {{option.name}}
</option>

这样ng-model就能拿到完整的option对象,直接访问id字段就没问题了。

总结一下:问题的本质是原生value的字符串限制,换用正确的绑定方式就能解决,不需要对ng-model做过滤处理。

内容的提问来源于stack exchange,提问作者user3400965

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:35