2015-06-07 83 views
1

我有一个下拉在我angular.js web应用程序,如:排序不工作的下拉菜单

<select ng-model="script" 
     ng-options="s as s[1].shortDescription for s in objs | orderBy:'toString()'" 
     ng-change="updateParam()"> 
</select> 

其中数组中的对象是

["test1", {shortDescription: "first test", longDescription: "AAAAAAAA"}] 

我想shortDescription排序类型每个条目的属性。问题在于排序不起作用。

UPDATE1

的样本数据

["test1", {shortDescription: "first test", longDescription: "AAAAAAAA"}] 
["test2", {shortDescription: "2nd test", longDescription: "BBBB"}] 
["test3", {shortDescription: "3rd test", longDescription: "CCCC"}] 
+0

ng选项中的数组索引看起来很可疑。 OrderBy后面应该跟着属性名称。 –

回答

0

它看起来像你想下面

| orderBy: 'shortDescription' 

如果你是财产shortDescription排序。请参阅orderBy docs了解更多信息。下面是一个简单的例子证明了该...

<select ng-model="script" 
     ng-options="s as s.shortDescription for s in objs | orderBy: 'shortDescription'"> 
</select> 

$scope.objs = [{shortDescription: "first test", longDescription: "AAAAAAAA"}, 
       {shortDescription: "aaa short", longDescription: "BBBBBB"}] 

JSFiddle Link - 工作示例

+0

感谢您的建议。不知道是否有解决方法,我们不改变对象数组的格式?谢谢。 – packetie

+0

@codingFun你可以发布多个条目的样本数据吗?也许我不能正确理解你的结构 – scniro

+0

刚刚添加了一个更新与多个条目的问题。谢谢。 – packetie

0

正如@sal德尼罗正在展示中,排序依据滤镜上的对象(为了通过属性你的示例数据显示你正在迭代一个数组数组,在第一个位置有一个字符串,第二个有一个对象,忘记了这个对象,你有一个数组数组,它​​没有有属性,只是元素,theres没有办法你不能根据数组元素的一个属性排序过滤器,据我所知:)。

最好的解决方案是将该数组数组转换为一个对象数组,其中每个对象都有一个标题,shortDescription和longDescription。

{ 
    title: 'test1', 
    shortDescription: 'a', 
    longDescription: 'aaaaaaaa' 
} 
+0

我花了很大的努力,对数据格式进行了修改,现在它运行正常。感谢你和@sal niro。 – packetie

+0

我不明白这是如何被接受的答案。问题是如何筛选我的答案中提到的'ng-options'中的项目。这个建议解决了你的数据结构的一个小问题 - 你需要改变,正如你在我的答案中看到的那样。 @codingFun – scniro

+0

@sal niro,希望我可以接受这两个答案:-)我接受了这个答案,因为它让我痛苦并改变了格式从'[“test1”,{shortDescription:“a”,longDescription:“aaaaaaa “}]'格式为{{title:'test1',shortDescription:'a',longDescription:'aaaaaaaa'}'。 – packetie