2016-11-16 80 views
4

我一直在嘗試製作一個geozones列表,並選擇各個稅種(並非所有稅種都適用於所有geozones)。ng重複ng中的重複過濾器

所以我做了一個ng-repeat的geozones,並在他們的每個內部ng-repeat與所有稅收。問題是我不知道如何發送當前正在過濾的地理區域的ID。這是現在的代碼:

<md-option ng-repeat="tax in taxClasses | filter: filterTax" value="{{ '{{ tax.id }}' }}">{{ '{{ tax.name }}' }}</md-option> 

和JS:

$scope.filterTax = function(tax, n){ 

     angular.forEach(tax.geoZone , function(geo){ 
      if(geo === $scope.prices[n].geozoneId){ 
       return true; 
      } 
     }); 
     return false; 
    }; 

要n個是geozone的索引,或者類似的東西。提前致謝!

回答

1

你的想法是不是已經不遠了,但使用filter:甚至沒有必要的,因爲管|已經是filter命令:

ng-repeat="<var> in <array> | <filterFunction>:<...arguments>" 

因此,你可以創建一個過濾器(見https://docs.angularjs.org/guide/filter用於對細節)

ng-repeat="tax in taxClasses | filterTax: <geozoneIndex>" 

價值形態的收集將作爲您filterTax功能的第一個參數傳遞。任何進一步的參數傳遞用冒號:分隔。

當你使用這個,你要傳播的過濾方法是這樣的:

app.module(...).filter('filterTax', function(/* injected services */) { 
    return function (/* arguments */ input, geozoneIndex) { 
    // function body 
    } 
}); 

或者使用過濾器功能,從你的範圍:

// template 
ng-repeat="tax in filterTaxes(taxClasses, <geozoneIndex>)" 

// script 
$scope.filterTaxes = function(taxClasses, geozoneIndex) { 
    // do the whole filtering, but return an array of matches 
    return taxClasses.filter(function(taxClass) { 
    return /* in or out code */; 
    }); 
}; 

這意味着你的geozoneIndex可以是固定值或從一個變量中提取,在該範圍內可用。

請注意,您的filterTax函數將被稱爲很多,因此如果您的頁面變慢,您可能需要考慮優化該過濾。

+0

感謝您的回答!但是我得到一個錯誤:[$ injector:unpr]未知提供者:filterTaxFilterProvider <-filterTaxFilter。我嘗試了HTML和JS中所有參數的組合,但我一定是做錯了什麼。 – Sslink

+0

更新了我的答案。我首先提出的濾波器需要在你的模塊中被知道,但是也可能有更簡單的選擇,我也提供了它。 – Tharabas