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 に答える