在ng-repeat内部引用外部范围变量

时间:2015-12-09 19:31:19

标签: angularjs angularjs-scope angularjs-ng-repeat angularjs-orderby

我希望有一个ng-repeat按某个外部查找表中的值排序。

例如,假设我有一个items列表,每个项目都有一个itemType。我在作用域中有一个单独的itemTypePriorities查找表,这样itemTypePriorities[someItemType]给出了给定项类型的优先级。现在,我想按照优先顺序显示项目。我正在尝试以下方法:

<div ng-repeat="item in items | orderBy:'itemTypePriorities[item.itemType]'>

但它似乎没有用 - 我的猜测是它在item的上下文中解释orderBy表达式,即它试图通过无意义的表达式进行排序item.itemTypePriorities[item.itemType]

有没有办法重写ng-repeat以使其正确运行,没有必须以任何方式修改itemsitemTypePriorities数组?

1 个答案:

答案 0 :(得分:1)

您当然可以使用orderBy过滤器,但我认为您需要创建一个自定义函数来订购。

例如:

<div ng-repeat="item in items | orderBy:myFunction>

myFunction在控制器的某处声明为:

$scope.myFunction = function(el){
    //el is the current element under evaluation
}

并且应该返回一个将与&lt;,===和&gt;进行比较的值与另一个。在您的情况下,该功能可以是:

$scope.myFunction = function(el){
    return itemTypePriorities.indexOf(el);
}

这应该有用