如何在ng-options中引用过滤后的数组

时间:2015-02-11 08:45:04

标签: angularjs

我希望能够在过滤后引用ng-options中的项目数。这可能吗?

例如,这有效:

<select ng-model="selectedItem"
    ng-options="_item.id as _item.name for _item in PageModel.objects"
    ng-show="PageModel.objects.length>0">
    <option value="">-- Select --</option>
</select>
<span ng-show="PageModel.objects.length==0">No objects to display</span>

我可以引用数组PageModel.objects的长度并使用它来打开或关闭组件。 但是如何对过滤后的数组做同样的事情呢?

<select ng-model="selectedItem.objectId"
    ng-options="_item.id as _item.name for _item in PageModel.objects  | filter:{type:filterBy}"
    ng-show="PageModel.objects.length>0">
    <option value="">-- Select --</option>
</select>
<span ng-show="PageModel.objects.length==0" >No objects to display</span>

这显然总会返回原始数组的长度,但有没有办法在更改时引用已过滤的列表?

这就是我期望它发挥作用的方式:

ng-options="_item.id as _item.name for _item in PageModel.objects  | filter:{type:filterBy} as filteredObjects"

然后能够使用变量filteredObjects,如:

<span ng-show="filteredObjects.length==0" >No objects to display</span>

但这不起作用。

这是一个显示工作示例的小提琴。我希望值(8)是动态的。

fiddle example (这些按钮仅用于模拟所需的结果)

我知道我可以在模型上使用手表但是可以用与上面类似的其他方式来完成吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

Select from a list of {{(PageModel.objects|filter:{type:filterBy}).length}}: <-- need to be able to reference/use this?

答案 1 :(得分:1)

您也应该在ng-show中应用相同的过滤器。

<select ng-model="selectedItem.objectId"
ng-options="_item.id as _item.name for _item in PageModel.objects  | filter:{type:filterBy}"
ng-show="(PageModel.objects|filter:{type:filterBy}) && (PageModel.objects|filter:{type:filterBy}.length>0">
<option value="">-- Select --</option></select>

要获得更好的解释,您可以查看以下链接:http://php.quicoto.com/use-ng-show-filtering-data-angularjs/

再见