2013-08-29 22 views
1

我有一个自定义的数据类型Message如何在AngularJS中使用方法作为过滤器?

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

你需要为 – zsong

+1

自定义过滤器@sza这是不正确的。看到“Jared Words”的答案。 – jessegavin

+0

@jessegavin这不过是一个过滤器。你可以使用'filter'模块或者只是一个函数来创建一个过滤器。 – zsong

回答

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> 
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> 
+0

你的意思是不把消息放在$ scope上吗? –

+0

对不起,我没有,谢谢 - 我纠正了它 –

相关问题