繁体   English   中英

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

[英]AngularJS: Filter function created by a function doesn't see updated scope

我正在尝试编写一个通用的过滤器功能,如下所示:

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使用o in objects | filter:myFilter ),但是当$scope.listOfIds更改时,我希望过滤后的值也更改-但是,它们不会更改。 我怀疑当我调用filterGenerator($scope.listOfIds) ,返回的lambda会获得$scope.listOfIds的单独范围版本,该版本不会更改,但是我不确定如何解决此问题。 我将如何确保lambda看到列表的任何更改?

没错,过滤器在运行时会采用$ scope.listOfIds的值,然后将不会更新,因为该行代码不会再次运行。

您应该让过滤器将listOfIds作为参数,然后在视图中传递该参数。

https://stackoverflow.com/a/16227326

ng-repeat="o in objects | filter:myFilter:listOfIds"

与Baritonehands先生合作之后,我们决定了一个更好的解决方案:我们可以像这样实时设置一个特定的过滤器:

$scope.filterFn = function(o) {
  return filterGenerator($scope.listOfIds)(o);
}

这样,生成的函数将始终查看示波器上的最新内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM