2015-05-22 21 views
5

voglio usare più filtri controllerAngularJS - Multiple utilizzo Filtri controller

Attualmente utilizzando

$filter('limitTo')($filter('lowercase')($filter('translate')('ACTIVE')), 5) 

Se abbiamo più filtri come questo. Come posso utilizzare più filtri nel formato controller piuttosto convenzionale come questo?

+0

Qual è la tua domanda esattamente? La domanda ha la risposta: stai già utilizzando più filtri nel controller. –

+1

Sto usando più filtri @JB Nizet. Formato semplificato che voglio di questo. –

+0

simile a: http://stackoverflow.com/questions/27852445/how-to-chain-angularjs-filters-in-controller – khakiout

risposta

2

Si può semplicemente introdurre variabili:

var limitTo = $filter('limitTo'); 
var lowercase = $filter('lowercase'); 
var translate = $filter('translate'); 

var filteredValue = limitTo(lowercase(translate('ACTIVE')), 5); 

O anche

var lowercaseStatus = lowercase(translate('ACTIVE')); 
var filteredValue = limitTo(lowercaseStatus, 5); 

Un'altra strategia potrebbe essere quella di utilizzare la stessa sintassi nella vista:

var filteredValue = $scope.$eval('"ACTIVE" | translate | lowercase | limitTo:5'); 
1

Questo è un domanda interessante Di solito si dovrebbe fare qualcosa di simile o qualcosa di simile:

var translatedValue = $filter('translate')('ACTIVE'); 
var lowercaseValue = $filter('lowercase')(translatedValue); 
$scope.finalValue = $filter('limitTo')(lowercaseValue, 5) 

ho creato un servizio ispirato dalla this answer.

app.service('FilterChain', 
['$filter', function($filter) { 
    var chain = { 
     value : '', 
     start : function(value) { 
      this.value = value; 
      return this; 
     }, 
     applyFilter : function(filterName, args) { 
      args = args || []; 
      args.unshift(this.value); 
      this.value = $filter(filterName).apply(undefined, args) 
      return this; 
     } 
    }; 

    return chain; 
}]); 

uso è come questo

$scope.value = FilterChain.start('Active') 
       .applyFilter('translate') 
       .applyFilter('limitTo', [5]) 
       .applyFilter('uppercase') 
       .value; 

È possibile utilizzare il servizio con altri filtri e oggetti come gli array. Guarda un esempio di lavoro qui: JSFiddle

Problemi correlati