[英]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.