angularjs - 根据子对象属性过滤ng-repeat列表

标签 angularjs angularjs-filter

jsfiddle http://jsfiddle.net/KfSBq/

所谓子对象,是指我用ng-repeat显示的所有对象在其内部都包含一个对象列表,并且我希望根据这些子对象之一的属性进行过滤。

仅此一项就非常简单。我有一个dailies对象,每个对象都包含一个date和一个entries对象列表:

function Ctrl($scope) {
    $scope.dailies = [{date: new Date('07/07/2013'), 
                       entries: [{category: 'A', note:'Lorem ipsum'}, 
                                 {category: 'B', note: 'Lorem ipsum'}]},
                      {date: new Date('05/02/2013'), 
                       entries: [{category: 'A', note: 'Lorem ipsum'}]}];
}

我按类别显示它们:
<div ng-controller="Ctrl">
        <div class="daily" ng-repeat="daily in dailies | orderBy:'-date' ">
            {{ daily.date | date:'dd/MM/y' }}
            <div class="entry" ng-repeat="entry in daily.entries | filter:{ category: 'B'} ">
                <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
            </div>
        </div>
    </div>

我的问题是,现在仍然显示不包含任何条目的日常对象。如何实现一种情况,如果过滤使entriesdaily列表为空,那么该daily也不会显示?

最佳答案

您可以在表达式内创建新的作用域成员。

这使您可以将过滤列表分配给新变量,该变量可以在整个本地范围内使用。这样,您可以将过滤列表的长度传递给ng-show:

<body ng-app>
  <div ng-controller="Ctrl">
    <div class="daily" 
      ng-repeat="daily in dailies | orderBy:'-date' " 
      ng-show="filteredEntries.length"
    >
      {{ daily.date | date:'dd/MM/y' }}
      <div class="entry" 
        ng-repeat="entry in filteredEntries = (daily.entries | filter:{ category: 'B'})"
      >
        <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
      </div>
    </div>
  </div>
</body>

FIDDLE

顺便说一句,很好地提出问题!

关于angularjs - 根据子对象属性过滤ng-repeat列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514272/

相关文章:

angularjs - 加载 View 时运行 AngularJS 初始化代码

javascript - 如何在 Javascript/Angular JS 中四舍五入——但删除无关紧要的数字

javascript - 如何在 ng-repeat 中对 JSON 数据进行排序?

javascript - 无法显示 bootstrap UI 模态

javascript - 用单词替换整数

javascript - 如何在angularjs中获取嵌套常量的值?

javascript - AngularJS 过滤器不能很好地工作

angularjs - 遍历对象数组Angular 2

javascript - 我必须将 $scope 原语包装在对象中,但可以使用函数而不包装它们。为什么?

javascript - 如何防止 Angular 拦截器在 jasmine 测试期间获取 $httpBackend 响应