1

我有一个自定义数据类型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"'>…&lt;/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"
4

2 回答 2

4

http://jsfiddle.net/DGKNN/

filter期望有一个表达式计算范围内的谓词。这是一个将元素作为参数并返回该元素是否应包含在集合中的函数。

在您的控制器中:

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

在您看来:

<li ng-repeat='message in messages | filter:hasStars | orderBy:"-stars.length"'>...</li>
于 2013-08-29T18:32:55.280 回答
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>
于 2013-08-29T18:42:35.050 回答