AngularJS:函数创建的过滤器函数没有看到更新的范围

时间:2015-04-08 14:18:13

标签: javascript angularjs

我正在尝试编写这样的通用过滤器函数:

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看到对列表的任何更改?

2 个答案:

答案 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);
}

这样生成的函数总能看到范围内的当前内容。