我有自定义数据类型Message
:
function Message(body, author, date) {
this.body = body;
this.author = author;
this.date = date;
this.stars = [];
}
Message.prototype.hasStars = function() {
return this.stars.length !== 0;
};
我也在对这些消息的数组进行重复:
<li ng-repeat='message in messages | orderBy:"-stars.length"'>…</li>
如何为调用message.hasStars()
的过滤器添加过滤器?我尝试了以下但没有一个有效:
message in messages | filter:message.hasStars() | orderBy:"-stars.length"
message in messages | filter:message:hasStars() | orderBy:"-stars.length"
message in messages | filter:message.hasStars | orderBy:"-stars.length"
message in messages | filter:message:hasStars | orderBy:"-stars.length"
答案 0 :(得分:4)
filter
期望有一个表达式可以计算范围的谓词。这是一个函数,它接受一个元素作为参数,并返回该元素是否应该包含在集合中。
在您的控制器中:
$scope.hasStars = function (message) {
return message.hasStars();
};
在您看来:
<li ng-repeat='message in messages | filter:hasStars | orderBy:"-stars.length"'>...</li>
答案 1 :(得分:1)
我假设一些名为 mySrv 的服务将消息加载到您的控制器中。
myapp.controller('myCtrlr',['$scope','mySrv',function($scope,mySrv){
$scope.messages = mySrv.getMessages();
}]); // end myCtrlr
myapp.filter('hasStars',function(){
return function(msg){
return msg.stars.length > 0;
};
});
在模板中
<ul ng-controller="myCtrlr">
<li ng-repeat="message in messages | hasStars | orderBy:"-stars.length">...</li>
</ul>