我正在尝试编写这样的通用过滤器函数:
var filterGenerator = function(ids) {
return function (o) {
return _.contains(ids, o.id); // using lodash _.contains
}
}
我在范围上公开了这个:
$scope.myFilter = filterGenerator($scope.listOfIds);
它适用于部分中的初始页面加载(使用o in objects | filter:myFilter
),但是当$scope.listOfIds
发生更改时,我希望过滤后的值也会发生变化 - 但是,它们不会。我怀疑当我调用filterGenerator($scope.listOfIds)
时,返回的lambda正在获得一个永远不会改变的$scope.listOfIds
的单独作用域版本,但我不确定如何解决这个问题。我如何确保lambda看到对列表的任何更改?
答案 0 :(得分:0)
你是对的,过滤器在运行时获取$ scope.listOfIds的值,然后不会更新,因为该行代码不再运行。
您应该将过滤器取listOfIds作为参数,然后在视图中传递该参数。
https://stackoverflow.com/a/16227326
ng-repeat="o in objects | filter:myFilter:listOfIds"
答案 1 :(得分:0)
在与Baritonehands先生合作之后,我们决定采用更好的解决方案:我们可以像这样设置一个特定的过滤器:
$scope.filterFn = function(o) {
return filterGenerator($scope.listOfIds)(o);
}
这样生成的函数总能看到范围内的当前内容。