Javascript 如何在AngularJS中使用方法作为过滤器?

Javascript 如何在AngularJS中使用方法作为过滤器?,javascript,angularjs,Javascript,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

我有一个自定义数据类型
消息

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>

filter
要求存在一个表达式,该表达式的计算结果为作用域上的谓词。这是一个函数,它接受一个元素作为其参数,并返回该元素是否应包含在集合中

在控制器中:

$scope.hasStars = function (message) {
    return message.hasStars();
};
在你看来:

<li ng-repeat='message in messages | filter:hasStars | orderBy:"-stars.length"'>...</li>
  • filter
    要求存在一个表达式,该表达式的计算结果为作用域上的谓词。这是一个函数,它接受一个元素作为其参数,并返回该元素是否应包含在集合中

    在控制器中:

    $scope.hasStars = function (message) {
        return message.hasStars();
    };
    
    在你看来:

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

  • 我假设某个名为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>
    

      我假设某个名为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>
      

        你需要一个自定义的过滤器that@sza事实并非如此。请参阅“像贾里德这样的词”的答案。@jessegavin,这只是一个过滤器。您可以使用
        filter
        模块创建筛选器,也可以只创建一个函数。它是一个谓词函数,但未通过依赖关系注入器在angular中注册为“筛选器”。您需要为其创建自定义筛选器that@sza事实并非如此。请参阅“像贾里德这样的词”的答案。@jessegavin,这只是一个过滤器。您可以使用
        filter
        模块创建筛选器,也可以只创建一个函数。它是一个谓词函数,但未通过依赖项注入器在angular中注册为“筛选器”。您的意思是不将消息放在$scope上吗?您的意思是不将消息放在$scope上吗?