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