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>