Javascript 使用AngularJS筛选对象属性为空时重复的ng

Javascript 使用AngularJS筛选对象属性为空时重复的ng,javascript,angularjs,filter,Javascript,Angularjs,Filter,我有一个具有多个属性的对象数组。所有这些对象都有一个object.comment属性,但在某些对象中,该属性用字符串('comment':'comment text')填充,而其他对象为空('comment':') 我用ng重复列出结果,如下所示: <div class="row msf-row" ng-repeat="record in filteredRecords = (recordlist | filter:dateFilter | filter: search )"

我有一个具有多个属性的对象数组。所有这些对象都有一个
object.comment
属性,但在某些对象中,该属性用字符串(
'comment':'comment text'
)填充,而其他对象为空(
'comment':'

我用ng重复列出结果,如下所示:

<div class="row msf-row" 
     ng-repeat="record in filteredRecords = (recordlist | filter:dateFilter | filter: search )" 
>
正如您所看到的,我已经有了一个过滤器,可以处理
对象.cancelled
是否为true或false,但是当
对象.comment
为空或有字符串时,我没有做到这一点


任何指针?

您可以创建自定义过滤器,请参见下面的演示

app.filter('emptyString', [
  function() {
    return function(input, param) {
      if (!param) return input

      var ret = [];
      if (!angular.isDefined(param)) param = true;


      if (param) {
        angular.forEach(input, function(v) {
          if (angular.isDefined(v.comment) && v.comment) {
            v.comment = v.comment.replace(/^\s*/g, '');
            ret.push(v);
          }

        });
      }



      return ret;
    };
  }
])
var-app=angular.module('app',[]);
应用程序控制器('homeCtrl',函数($scope){
$scope.recordlist=[{
时间:“2014年11月10日”,
评论:“超级”
}, {
时间:“2014年11月10日”,
评论:“”
}, {
时间:“10/11/2005”,
评论:“”
}, {
时间:“2014年11月1日”,
评论:“没关系”
}
];
});
应用过滤器('emptyString'[
函数(){
返回函数(输入,参数){
如果(!param)返回输入
var-ret=[];
如果(!angular.isDefined(param))param=true;
如果(参数){
角度forEach(输入,函数(v){
如果(角度定义(v.comment)和&v.comment){
v、 comment=v.comment.replace(/^\s*/g',);
后推(v);
}
});
}
返回ret;
};
}
])

取消
评论记录

一个简单的解决方案是使用
ng hide
指令:

<div class="row"
    ng-repeat="record in filteredRecords"
    ng-hide="search.comment && (!record.comment || record.comment === '')">
</div>

它的意思是:如果选中了
search.comment
,并且
记录.comment
未定义或为空,则隐藏此元素

请查看此plunker:


这是预期的行为吗?

如果我使用ng hide=“record.comment==”,它将工作并仅显示带有注释的行为,但我无法使用复选框使用search.comment切换@EricMitjans你使用了整个条件吗?我的意思是,
ng hide=“search.comment&&(record.comment | | record.comment===”)
Yes!它会过滤掉所有结果!:/@EricMitjans好的,我发现了一个错误,检查更新的答案并点击。现在它工作了!我意识到我不能使用它,但这是另一个原因。如果我使用过滤器,它需要更多的资源,而且速度较慢,但我可以使用过滤结果创建一个新数组(例如:
ng repeat=“record in filteredRecords=(recordlist | filter:search)”
。我需要在计算结果数组(filteredRecords)的长度时执行此操作甚至下载过滤后的结果,所以ng hide对我来说不起作用(它以视觉方式过滤结果,但在新的数组中不起作用),但无论如何,这是一个非常好的解决方案!我将在其他ng重复中使用它!
<div class="row"
    ng-repeat="record in filteredRecords"
    ng-hide="search.comment && (!record.comment || record.comment === '')">
</div>