簡體   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