2013-05-29 71 views
1

在AngularJS中,如何將參數傳遞給自定義過濾函數?在這種情況下,我需要在過濾器函數中提供taskstatus過濾函數的參數

但是Angular只注入了task。我該如何添加status

HTML

<div ng-repeat="status in statuses"> 
    Selected Status: {{ status.title } 
    <ul> 
     <li ng-repeat="task in tasks | filter:customFilter"> 
      Task Status: {{ task.status } 
     </li> 
    </ul> 
</div> 

JS

$scope.customFilter = function(task, status) 
{ 
    // use task and status to show only those tasks that have the selected status 
}; 

我已經試過<li ng-repeat="task in tasks | filter:customFilter(task, status)">,但沒有奏效。

+1

附註:我認爲'Status = {{status.title}'應該是'Status = {{status.title}}'。 –

回答

2

要將多個參數傳遞給過濾器,只需要用冒號分隔它們即可。在使用過濾器功能的情況下,您只需將現有的過濾器功能封裝在自定義過濾器中即可。

app.filter('customFilterName', ['$filter', function ($filter) { 
    var standardFilter = $filter('filter'); 
    return function (tasks, status) { 
     return standardFilter(tasks, function (task) { 
      // use task and status to show only those tasks that have the selected status 
     }); 
    }; 
}]); 

第一行是過濾器工廠函數的定義。第二行加載標準過濾器過濾器(我知道的愚蠢命名)。第三行是我們創建的實際過濾器函數的定義,並且在第四行中我們包裝現有的過濾器來處理我們的輸入。

表面上有點複雜,但它使視圖中的事物更具可讀性,以使用自定義命名過濾器和參數,並且除去了很多伴隨着指定對象作爲參數的鍋爐板。

而在你的看法:

<div ng-repeat="status in statuses"> 
    Status = {{ status.title } 
    <ul> 
     <li ng-repeat="task in tasks | customFilterName:status"> 
     </li> 
    </ul> 
</div> 
+0

我試過了。把一個console.log放入函數中。 Nver被召喚。 – Ben

+0

我有一個錯字,我添加了一個小提琴來顯示它的工作。 http://jsfiddle.net/VxgAN/ –

+0

這是我的錯誤,所以將小部件更改爲任務並且錯誤消失 –

0

編輯: 我最初說 - 你不必一定纏上$過濾你的函數 - 它應該工作原樣。要獲得外部示波器,請使用$parent。 - 這是不正確的。在第二個ng-repeat中應該可以訪問父範圍。此外,要傳遞多個參數,可以角的原生filter應該被調用,因爲以前的答案還指出:

app.filter('realFilter', function(){ 
    return function(itemArray, param){ 
    var filteredList=[]; 
    console.log(param); 
    for (var i in itemArray){ 
     if (itemArray[i].statum == param){ 
      filteredList.push(itemArray[i]); 
     } 
    } 
    return filteredList; 
    } 
}) 

HTML:

<li ng-repeat="task in tasks | realFilter:status.status"> 
    Task Status: {{ task.statum }} 
</li> 

Here's the plunk

+0

這對我不起作用。 – Ben

+0

讓我測試,我可能會瘋狂... – rGil

+0

那麼,你的plunker日誌「未定義」。我在這裏錯過了點嗎? – Ben