尝试过滤掉具有非空属性的项目 所以:
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);