2015-01-26 105 views
0

我正在制作一个小型应用程序,用于对用户具有类似于游戏排行榜的点列表进行排序。我已经在一个对象数组上设置了一个ng-repeat,并在不同的选项选择上显示了一个ng-show,以在列表中显示一个跨度。跨度显示不同的得分。AngularJS:OrderBy筛选器选项选择

我在ng-repeat上添加了一个orderBy过滤器,所以列表从最大值过滤到最小值。例如,当选择“创建线程”的选项时,“发布读取”和“已回复帖子”的分数被隐藏,并且列表按照创建的线程数(从最大到最小)排序。

它适用于两个选项值,但不适用于第三个。任何想法为什么?

   <tr ng-repeat="user in users | orderBy:['-created','-read','-replied']"> 
      <td> {{user.index}} </td> 
      <td> {{user.firstName}} {{user.lastName}}</td> 
      <td> 
       <span ng-show='discussionsSelect == "created"'>{{ user.created }}</span> 
       <span ng-show='discussionsSelect == "read"'>{{ user.read }}</span> 
       <span ng-show='discussionsSelect == "replied"'>{{ user.replied }}</span> 
      </td> 
      </tr> 
+0

您可以在plunker或jsfiddle中复制问题吗?另外,请发布一些背后的代码? – SoluableNonagon 2015-01-26 19:04:26

+1

你为什么觉得不工作?你可以发布一份清单和有序清单吗? – 2015-01-26 19:04:50

+0

需要查看数据。订单中的第三项只会在前两项完全相同时发挥作用。也许你在这种情况下没有任何数据。 – Scott 2015-01-26 19:06:44

回答

0

如果我正确地理解了这一点,那么您没有正确地做到这一点。您的列表将只能按“创建”进行排序。 orderBy子句的第二个值只有在找到两个具有相同'created'的对象时才会起作用。同样,您的orderBy子句中的第三个值也是如此。如果两个项目具有相同的“已创建”,然后具有相同的“读取”值,那么将只能使用它。
您将需要订购一个变量,该变量根据所选的下拉菜单进行设置。您可以将其设置为您的选择绑定到的变量的名称。我认为这是讨论选择你的plnkr。

 <tr ng-repeat="user in users | discussionsSelect"> 
+0

它应该是'' – 2015-01-26 19:24:35

+0

谢谢。 @UlanMurzatayev - orderBy过滤器工作。 – JDH 2015-01-26 19:29:14