Angularjs筛选器不为null
试图过滤掉某些非null属性的项目所以:
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>
任何想法如何我可以做到这一点,而不创build自定义filter? 甚至如此,自定义filter会是什么样子?
根据https://github.com/angular/angular.js/issues/11573(对于Angular> = 1.4),build议使用“'匹配除null / undefined之外的任何基元。
<ul> <li ng-repeat="detail in details | filter:{shortDescription: ''}"> <p>{{detail.shortDescription}}</p> </li> </ul>
Angular> = 1.3.16到最新版本(写入/更新时为1.5.5)使用''
(空string)(或'!!'
也可以)
<ul> <li ng-repeat="detail in details | filter:{shortDescription: ''}"> <p>{{detail.shortDescription}}</p> </li> </ul>
例如: http : //jsfiddle.net/TheSharpieOne/1mnachk6/
Angular> = 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/
Angular> = 1.2和<= 1.3.5使用''
(空string)(或'!!'
也可以)
<ul> <li ng-repeat="detail in details | filter:{shortDescription: ''}"> <p>{{detail.shortDescription}}</p> </li> </ul>
例如: http : //jsfiddle.net/TheSharpieOne/ovsqf17n/
angular<1.2 '!!'
<ul> <li ng-repeat="detail in details | filter:{shortDescription: '!!'}"> <p>{{detail.shortDescription}}</p> </li> </ul>
例如: http : //jsfiddle.net/TheSharpieOne/RGEdc/
总的来说, '!!'
有最好的支持,但''
(空string)被推荐和打算为此 。
值得注意的是,要使用空引号解决scheme,则需要将比较器的默认值设置为false
。 你也许习惯于在你的控制器filter中实现这个function,像这样:
const myAssessments = this.filterFilter(this.assessments, {userId: this.user.id}, true);
没有最终的true
那种严格的filter是行不通的。 但是,您需要删除true或将其设置为false,以便进行非空检查:
const activeAndHistoric = this.filterFilter(filteredAssessments, {historicYear: ''}, false);
我认为这样比较容易阅读
<ul> <li ng-repeat="detail in details" ng-if="detail.shortDescription"> <p>{{detail.shortDescription}}</p> </li> </ul>