2015-07-16 9 views
17

In diesem Beispiel verwende ich Filter im ng-repeat, aber wie verwende ich es in einer Variablen und ng-if, so etwas wie:Wie Filter in ng-wenn und Variable?

{{languages.length | filter: {available: true}}} 

und

ng-if="languages.length == 0 | filter: {available: true}" 

Fiddle See.


HTML

<div ng-controller="mainController"> 
    <div>There are {{languages.length}} languages in total.</div> 
    <div>??? There are {{languages.length}} languages available.</div> 
    <div ng-if="languages.length == 0">??? Sorry, there are no languages available.</div> 

    <ol> 
     <li ng-repeat="language in languages | filter: {available: true}">{{language.name}}</li> 
    </ol> 
</div> 

AngularJS

$scope.languages = [ 
    {id:1, name:"German", available: false},  
    {id:2, name:"English", available: true},  
    {id:3, name:"French", available: false}, 
    {id:4, name:"Italian", available: true}, 
    {id:5, name:"Spanish", available: false} 
]; 
+0

Ich weiß nicht, warum Sie das tun möchten, einfach können Sie tun

  1. {{language.name}}
ngLover

+0

Ich möchte einfach anzeigen, wie viele Sprachen verfügbar sind, genauso wie ich die Anzahl der gesamten Sprachen anzeigen kann. Ich könnte eine Funktion machen, dies zu tun und die Filterung in JavaScript, aber ich würde erwarten, dass es eine Möglichkeit gibt, dies in der angularen Syntax im HTML-Code zu tun –

+2

Manchmal ist die kurze Funktion in $ scope lesbarer als spagetti code in html. – Styx

Antwort

35

Können Sie das versuchen?

<div ng-controller="mainController"> 
    <div>There are {{languages.length}} languages in total.</div> 
    <div>There are {{(languages|filter:{available:true}).length}} languages available.</div> 
    <div ng-if="(languages|filter:{available:true}).length == 0">Sorry, there are no languages available.</div> 

    <ol> 
     <li ng-repeat="language in languages | filter: {available: true}">{{language.name}}</li> 
    </ol> 
</div> 
5

Gerade vorherige Antwort zu aktualisieren, keine Notwendigkeit, dreimal zu filtern, neue Variable 'gefiltert' auf den ersten Filter erstellen:

<div ng-controller="mainController"> 
    <div>There are {{languages.length}} languages in total.</div> 
    <div>There are {{(filtered = (languages|filter:{available:true})).length}} languages available.</div> 
    <div ng-if="filtered.length == 0">Sorry, there are no languages available.</div>  
    <ol> 
     <li ng-repeat="language in filtered">{{language.name}}</li> 
    </ol> 

    filtered=[{{filtered}}] 
</div> 

http://jsfiddle.net/to7z06ma/18/

1
<div ng-if="(answerText|lowercase)=='true'">T</div> 

<div ng-if="(answerText|lowercase)=='false'">F</div>

Dies funktioniert für mich