AngularJS选择列表与所选项目不匹配
AngularJS Select List doesnt match selected Item
我的AngularJS应用程序中有一个全局控制器,它为我提供了一个包含Attendee对象的数组。我想要的是修改我的课程注册模型,它包含一个特定的参与者对象。在编辑窗口中,我想获得一个包含所有可能与会者的下拉列表,而应该选择当前与会者。
我的html中有以下代码:
<select ng-model="courseRegistration.attendee" ng-options="attendeeSelectItem.name for attendeeSelectItem in attendeeSelectItems"></select>
如果我用JSON.stringify打印出courseRegistration.attendee
,并用相应的选项打印出相同的对象(相同的id、相同的名称等)。但如果我对两个相同的对象执行类似(courseRegistration.attendee == attendeeSelectItem
)的操作,那么我会得到false。
所以我的问题是,我如何确保当前选择的项目(存储在courseRegistration.attee中)与我的列表中的相应对象(选项使用该对象)匹配?
提前非常感谢。
JSFiddle:http://jsfiddle.net/2ddCy/
问候Marc
本质上,当您使用对象数组来填充选择时,它会选择整个对象,而不仅仅是您在选择列表中看到的一个项目。
有关详细信息和示例代码,请参阅此问题:同时使用ng选项和ng切换时的问题
我假设您的控制器中有以下内容?
$scope.courseRegistration = {attendee: {id: 2, name: "A Person"}}
如果是这样,则比较失败的原因是,尽管对象可能与当前选择的对象具有相同的属性,但它指的是内存中的不同对象,因此不被归类为相等对象。
现在,作为一个快速破解,你可以将它们字符串化,然后进行比较,然而正确的方法是通过键设置当前值:
$scope.courseRegistration = {attendee: attendeeSelectItems[1]};
或者只需存储id/name并将ng-options
条件设置为仅绑定到该值:
$scope.courseRegistration = {attendee: 1};
<select ng-model="courseRegistration.attendee" ng-options="attendeeSelectItem.id as attendeeSelectItem.name for attendeeSelectItem in attendeeSelectItems"></select>
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- jQuery:根据select选项中的每页项目进行分页
- 更新:仅根据单选按钮和所选选项选择特定项目
- HTML选择,在DOM中选择了正确的选项,但在firefox中显示了错误的项目
- 如何在angular js中的select选项中获取所选项目id
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- 当表单控件选项具有多个参数时,如何在组合框中填充所选项目
- 通过单击按钮将选项卡(项目)添加到选项卡面板,扩展
- 如何将此选项添加到此图像选取器项目中
- 更新“项目”选项以进行排序
- 在呈现项目后,挖空选择绑定回调的选项
- 在单击选项卡式项目时隐藏和创建另一个对象 - HTML CSS
- 使用表排序器筛选所选选项列表中的选定项目
- jQuery 在选项列表中重新填充所选项目
- 将项目插入活动选项卡窗格
- Microsoft Dynamics Online:将所有选项集项目复制到多行文本字段(使用 JavaScript)
- 在选择选项中选择多个项目,而不使用“Ctrl”键
- jQuery Mobile,在选项列表中选择所有项目
- 从下拉列表中选择项目后,显示新选项并显示文本
- 如何在浏览器窗口/选项卡关闭时删除本地存储项目