Angularjs filter not null

Angularjs filter not null

本文关键字:null not filter Angularjs      更新时间:2023-09-26

尝试过滤掉具有非空属性的项目 所以:

var details = [{name:'Bill', shortDescription: null}, {name:'Sally', shortDescription: 'A girl'}]

我只想展示一个李;莎莉的那个。这是我尝试过的,但没有成功

<ul>
<li ng-repeat="detail in details | filter:{shortDescription:'!'}">
<p>{{detail.shortDescription}}</p>
</li>
</ul>

知道如何在不创建自定义过滤器的情况下执行此操作吗?或者即便如此,自定义过滤器会是什么样子?

角度>=1.3.16 到最新版本(撰写/更新时为 1.5.5)使用 ''(空字符串)(或'!!'也有效)

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

示例:http://jsfiddle.net/TheSharpieOne/1mnachk6/


角度>=1.3.6 和 <=1.3.15 使用'!null'

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: '!null'}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

示例:http://jsfiddle.net/TheSharpieOne/4wxs67yv/


角度>=1.2 和 <=1.3.5 使用 ''(空字符串)(或'!!'也有效)

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

示例:http://jsfiddle.net/TheSharpieOne/ovsqf17n/


角度 <1.2 '!!'

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: '!!'}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

示例:http://jsfiddle.net/TheSharpieOne/RGEdc/


总体而言,'!!'具有最好的支持,但建议并为此使用''(空字符串)。

根据 Angular>= 1.4 的 https://github.com/angular/angular.js/issues/11573,建议使用与除 null/undefined 之外的任何原语匹配的 ''。

<ul>
    <li ng-repeat="detail in details | filter:{shortDescription: ''}">
        <p>{{detail.shortDescription}}</p>
    </li>
</ul>

我认为这更容易阅读

 <ul>
    <li ng-repeat="detail in details" ng-if="detail.shortDescription">
        <p>{{detail.shortDescription}}</p>
    </li>
 </ul>

值得注意的是,要使用空引号解决方案,您需要将比较器保留在其默认值 false 。您可能习惯于在控制器过滤器中输入true,如下所示:

const myAssessments = 
       this.filterFilter(this.assessments, {userId: this.user.id}, true);

如果没有最终true,这种类型的严格过滤器将无法工作。但是您需要删除 true 或将其设为 false 才能使非空检查起作用:

const activeAndHistoric = 
      this.filterFilter(filteredAssessments, {historicYear: ''}, false);