2013-03-27 11 views
27

Ho seguente codice HTMLAngularjs. Come posso passare una variabile come argomento al filtro personalizzato?

<span class="items-count">{{items | countmessage}}</span> 

E seguendo filtro per visualizzare un messaggio conteggio destra

app.filters 
    .filter('countmessage', function() { 
     return function (input) { 
      var result = input.length + ' item'; 
      if (input.length != 1) result += 's'; 
      return message; 
     } 
    }); 

ma voglio usare parole diverse invece e 'item (s)', così ho modificato il filtro

app.filters 
    .filter('countmessage', function() { 
     return function (input, itemType) { 
      var result = input.length + ' ' + itemType; 
      if (input.length != 1) result += 's'; 
      return message; 
     } 
    }); 

funziona quando utilizzo una stringa del tipo

<span class="items-count">{{items | countmessage:'car'}}</span> 

ma non funziona con una variabile dal $ campo di applicazione, è possibile utilizzare $ portata variabile

<span class="items-count">{{items | countmessage:itemtype}}</span> 

Grazie

risposta

35

Sì, è possibile utilizzare variabile dal $scope

Vedere questo violino per un esempio: http://jsfiddle.net/lopisan/Kx4Tq/

HTML:

<body ng-app="myApp"> 
    <div ng-controller="MyCtrl"> 
     <input ng-model="variable"/><br/> 
     Live output: {{variable | countmessage : type}}!<br/> 
      Output: {{1 | countmessage : type}}! 
    </div> 
</body> 

JavaScript:

var myApp = angular.module('myApp',['myApp.filters']); 

function MyCtrl($scope) { 
    $scope.type = 'cat'; 
} 

angular.module('myApp.filters', []) 
    .filter('countmessage', function() { 
     return function (input, itemType) { 
      var result = input + ' ' + itemType; 
      if (input > 1) result += 's'; 
      return result; 
     } 
    }); 
+0

ok grazie, ho trovato già, ho appena perso mia variabile per l'ambito corrente, funziona ora. – IgorCh

+1

Possiamo generare il $ scope.type in modo dinamico attraverso l'input dell'utente? Ad esempio: ''? – Clev3r

+0

@Clever: Sì, si può fare, basta aggiungere '' alla parte HTML del violino. – lopisan

Problemi correlati