0

我的 AngularJS 应用程序中有一个全局控制器,它为我提供了一个包含参加者对象的数组。我想要的是修改包含一个特定参与者对象的 CourseRegistration 模型。在编辑窗口中,我想获得一个包含所有可能参加者的下拉列表,而应该选择当前参加者。

我的 html 中有以下代码:

        <select ng-model="courseRegistration.attendee" ng-options="attendeeSelectItem.name for attendeeSelectItem in attendeeSelectItems"></select>

如果我courseRegistration.attendee使用 JSON.stringify 打印并使用相应的选项执行相同操作,它们会打印出相同的对象(相同的 ID、相同的名称等)。但是,如果我courseRegistration.attendee == attendeeSelectItem对两个相同的对象执行类似 () 的操作,那么我会得到错误的结果。

所以我的问题是如何确保当前选定的项目(存储在 courseRegistration.attendee 中)与列表中的相应对象(由选项使用)匹配?

提前非常感谢。

JSFiddle:http: //jsfiddle.net/2ddCy/

问候马克

4

2 回答 2

0

本质上,当您使用一组对象来填充选择时,它会选择整个对象,而不仅仅是您在选择列表中看到的一个项目。

有关详细信息和示例代码,请参阅此问题:Problems when using ng-options and ng-switch together

于 2013-07-23T15:43:00.670 回答
0

我假设您的控制器中有类似以下内容?

$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>
于 2013-07-23T15:50:05.060 回答