2014-02-05 90 views
1

我想要做的:使用關聯數組NG重複指令,這是我想要篩選

林。角度過濾器的構建不適用於關聯數組/散列。因此,我試圖寫我自己的過濾器(靈感來自http://angularjs.de/artikel/angularjs-ng-repeat;它是用德語編寫的,但重要的代碼在標題「Beispiel 2:Filtern von Hashes mittels eigenem Filter」下面,意思是「Example 2:Filter Hashes with你自己的過濾器「)。

的NG-重複:

tr ng-repeat="(key, machine) in machines | customFilter | orderObjectBy:'name':false" 

注:orderObjectBy也是customFilter。

過濾器:

toolApp.filter('customFilter', [function(){ 
    return function(machines){ 
     var result = {}; 

     angular.forEach(machines, function(machine, key){ 
      /*if(machine.name.contains(filter)){ 
       result[key] = machine; 
      }*/ 
      //if(machine.name.contains("a")){ 
       result[key] = machine; 
      //} 
     }); 
     return result; 
    }; 
}]); 

這個過濾器可以用硬編碼 「濾波器繞圈」。但我想在列表上方有一個文本框,用戶可以在其中輸入「過濾器標準」。 我的問題是,我不知道如何將此值插入過濾器。我在互聯網上找不到太多東西,而我發現的東西並不適合我。

有沒有人有一個想法如何插入值或oder可能是一種不同的方法。

巨大的感謝提前爲每個答案!如果您需要更多信息,請告訴我!我試圖保持簡短:>。來自德國

回答

6

問候你可以有參數,以您的自定義過濾器。

假設你有一個輸入字段:

<input ng-model="myParam"> 

和NG-重複像你這樣的:

<tr ng-repeat="(key, machine) in machines | customFilter:myParam | orderObjectBy:'name':false" > 

那麼你可能在你的自定義過濾器訪問該參數:

toolApp.filter('customFilter', [function(){ 
    return function(machines, myParam){ 
     var result = {}; 

     angular.forEach(machines, function(machine, key){ 
      if(machine.name.contains(myParam)){ 
       result[key] = machine; 
      } 
     }); 
     return result; 
    }; 
}]); 

說明: 請注意,myParam值是使用「未定義」值。您必須在控制器中設置默認值或在customFilter中處理它。否則,只有在您開始輸入內容後纔會看到您的列表。

+0

非常感謝您的回答! :)偉大的作品 – zois

+0

優秀的答案,解決了我的問題 –