2013-07-23 17 views
0

我在我的AngularJS应用程序中有一个全局控制器,它提供了一个包含Attendee对象的数组。我想要的是修改我的课程注册模型,其中包含一个特定的与会者对象。在编辑窗口中,我希望所有可能的与会者都能看到下拉菜单,而应该选择当前的与会者。AngularJS选择列表不符合选定的项目

我在我的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/

电贺 马克

+0

亲切交流你的提琴或plunker演示 –

回答

0

我假设你有类似的东西在你的控制下?

$scope.courseRegistration = {attendee: {id: 2, name: "A Person"}}

如果是这样,比较失败的原因是,虽然该物体可以具有相同的属性当前所选择的一个,它指的是在存储器中的不同的对象,因此不归类为相等。

现在作为一个快速黑客,你可以字符串化它们,然后比较,但正确的做法是,要么设置由键的当前值:

$scope.courseRegistration = {attendee: attendeeSelectItems[1]};

或者只是存储的ID /名称,并设置您ng-options条件绑定到这一点值:

$scope.courseRegistration = {attendee: 1}; 

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

感谢您的建议。我喜欢用键值的方法1。这意味着我将不得不遍历所有attendeSelectItems以找出与当前课程注册相匹配的内容。 – mooonli

+0

很难说真的,因为你发布的小提琴实际上并没有显示你想要做什么 – noj

+0

那么我所做的是我从REST资源获取当前课程注册......以及本课程注册的一个项目是注册与会者对象。另一方面,我会进行REST调用以获取所有可用的参与者(包含所有参与者的数组)。而我想要得到的是,如果我编辑此课程注册,其中包含的与会者项目将与参加者数组中的相应与会者对象进行匹配。 stringify的选项如何? – mooonli