我有一个自定义数据类型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"

最佳答案

http://jsfiddle.net/DGKNN/

filter期望存在一个表达式,该表达式的值取决于范围的谓词。该函数接受一个元素作为其参数,并返回该元素是否应包含在集合中。

在您的控制器中:

$scope.hasStars = function (message) {
    return message.hasStars();
};


您认为:

<li ng-repeat='message in messages | filter:hasStars | orderBy:"-stars.length"'>...</li>

08-19 19:51