如何在ng-if和变量中使用过滤器?

31

在这个示例中,我在ng-repeat中使用了过滤器,但如何在变量和ng-if中使用它呢?类似这样:

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

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

请见Fiddle


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}
];

我不知道你为什么想要这样做,其实你可以这样做:<ol> <li ng-if="languages.length" ng-repeat="language in languages | filter: {available: true}">{{language.name}}</li> </ol> - ngLover
我只想显示有多少种语言可用,就像我显示总语言数量一样。我可以编写一个函数来完成这个任务,并在JavaScript中进行过滤,但我希望能够在Angular语法中在HTML代码中完成此操作。 - Edward Tanguay
2
有时候,在$scope中编写短函数比在HTML中编写面条式代码更易读。 - Styx
3个回答

59

你能试试这个吗?

<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>

7

更新之前的答案,无需三次过滤,只需在第一次过滤时创建一个新变量“filtered”:

<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/


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

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

这对我有效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接