2016-11-16 4 views
4

Ich habe versucht, eine Liste von Geozonen, mit einer Auswahl von Steuern jeder machen (nicht alle Steuern gelten für alle Geozonen).Angular ng wiederholen Filter innerhalb ng wiederholen

Also habe ich eine ng-Wiederholung für die Geozonen gemacht, und in jedem von ihnen eine ng-Wiederholung mit allen Steuern. Problem ist, ich weiß nicht, wie man die ID der Geozone sendet, die gerade gefiltert wird. Dies ist der Code jetzt:

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

und die JS:

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

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

Need n der Index des Geozone oder etwas Derartiges zu sein. Danke im Voraus!

Antwort

1

Ihre Idee ist nicht so weit weg, aber filter: Verwendung ist nicht einmal notwendig, da das Rohr | ist bereits ein filter Befehl:

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

So können Sie einen Filter erstellen (siehe https://docs.angularjs.org/guide/filter Einzelheiten über die als erste Argument Ihrer filterTax Funktion

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

der Wert der Sammlung bilden. Jedes weitere Argument wird getrennt durch einen Doppelpunkt : übergeben.

Wenn Sie diese verwenden, müssen Sie einen Filter Methode wie folgt propagieren:

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

Alternativ eine Filterfunktion aus Ihrem Bereich verwenden:

// 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 */; 
    }); 
}; 

Dies bedeutet, dass Ihr geozoneIndex kann entweder ein fester Wert oder aus einer Variablen gezogen werden, die in diesem Bereich verfügbar ist.

Denken Sie daran, dass Ihre filterTax Funktion viel genannt wird. Wenn Ihre Seite langsam wird, sollten Sie vielleicht überlegen, diese Filterung zu optimieren.

+0

danke für deine antwort! Aber ich bekomme einen Fehler: [$ injector: unpr] Unbekannter Provider: filterTaxFilterProvider <-filterTaxFilter. Ich habe jede Kombination von Argumenten in HTML und JS ausprobiert, aber ich muss etwas falsch machen. – Sslink

+0

Meine Antwort wurde aktualisiert. Die Filter, die ich zuerst vorgeschlagen habe, müssen in deinem Modul bekannt sein, aber es gibt eine vielleicht einfachere Alternative, die ich auch zur Verfügung gestellt habe. – Tharabas

Verwandte Themen