2014-05-02 55 views
1

我想使用我已寫在我的控制器使用ng選項縮小選擇列表的篩選器。過濾器邏輯正在工作,但結果未顯示。AngularJS - 從控制器過濾邏輯工作,沒有正確顯示

這裏是我的控制器的相關部分:

 $scope.ESGFilter = function() { 
      var esg; 
      var filteredESGs = []; 

      // LOGIC GOES HERE TO POPULATE THE filteredESGs ARRAY 

      console.log(filteredESGs); 
      return filteredESGs; 
     }]); 

這裏的HTML:

<select class="input-block-level" id="inputESG" name="inputStoch" 
     ng-model="Run.ESG" 
     ng-options="econ.Id as econ.Name for econ in econData | filter:ESGFilter" size="5"> 
    </select> 

我懷疑這個問題必須與 「過濾器:ESGFilter」 中的HTML ...我不知道爲什麼從函數返回的數組沒有被顯示。控制器中的功能肯定會被調用並且邏輯正在工作。

作爲參考,console.log輸出:[Object,Object] - 當我展開這些對象的屬性時,我確認它們是我想要的。然而,選擇列表顯示了所有四個對象(我從四個數組中篩選出來)。

回答

2

您的過濾器需要返回true/false語句。寫你的過濾器是這樣的:

$scope.ESGFilter = function(item) { 
    // if you want to keep the item return true, else false 
}; 

這工作,因爲ngOptions把你的陣列中的每個項目,並把它傳遞給你的過濾功能。你的例子不起作用,因爲它返回一個空數組,它總是會解析爲真值,並且所有對象都將被接受並且不被過濾。

這裏有一個普拉克:

http://plnkr.co/edit/RfKMcXDKy1m1EGyoEpS7?p=preview

+0

你是一個神人之中,非常感謝你!我想我應該明白,爲什麼我的console.log()語句執行了很多次......我在邏輯中使用了angular.forEach,所以我無知地有一個嵌套for循環(因爲項目是無論如何都是從ng-options傳入的)。 –