Javascript 使用ng repeat时仅过滤一个或多个元素

Javascript 使用ng repeat时仅过滤一个或多个元素,javascript,angularjs,ng-repeat,Javascript,Angularjs,Ng Repeat,我只想打印使用ng repeat打印的数组的部分而不是全部元素 数组存储在$scope.userRecipes=[]中 在我使用的HTML中: <li ng-repeat="f in userRecipes" class="list-group-item"> ... <div class="row panel-body" ng-show="!f.isCollapsed"> <hr> <div class="col-md-6"> <

我只想打印使用ng repeat打印的数组的部分而不是全部元素

数组存储在
$scope.userRecipes=[]

在我使用的HTML中:

<li ng-repeat="f in  userRecipes" class="list-group-item">

...

<div class="row panel-body" ng-show="!f.isCollapsed">
<hr>
<div class="col-md-6">
   <h3>{{f.trigger.triggerType | capitalize}} trigger</h3>
      <div ng-repeat="(key, data) in f.trigger" ng-if="!(key == 'triggerType')
         || !(key == 'lastCheck')
         || !(key == 'sender')
         || !(key == 'gaid')
         || !(key == 'ctid')
         ">
      <h4>{{key | reformat | capitalize}}:</h4> {{data}}
      </div>
</div>

<div class="col-md-6">
   <h3>{{f.action.actionType | capitalize}} action</h3>
      <div ng-repeat="(key, data) in f.action" ng-if="key.toString().localeCompare('actionType') || data.notNull() || !data">
      <h4>{{key | reformat | capitalize}}:</h4> {{data}}
   </div>
</div>
</div>
...

</li>
  • ...
    {{f.trigger.triggerType | capitalize}}触发器 {{key}重新格式化{124; capitalize}}:{{data} {{f.action.actionType | capitalize}}action {{key}重新格式化{124; capitalize}}:{{data} ...
  • 但是这个解决方案(
    ng if=“!(key=='triggerType')||!(key=='lastCheck')||……“
    )对我不起作用。仅当我设置一个条件时,它才起作用:
    ng if=“!(key=='triggerType')”
    在单独离开时起作用。如果我使用
    ng If=“!(key=='triggerType')| |!(key=='lastCheck')
    它不起作用

    请注意,
    reformat
    capitalize
    是两个AngularJS
    myApp.filters(…)


    小结:目标是确保
    ng repeat
    忽略那些具有特定键或数据的元素(不打印空HTML行).

    如果存在缺陷,则
    ng中的逻辑存在缺陷。如果任何条件为true,则返回true,因此每次迭代都会返回true。您需要的是逻辑
    运算符,而不是

    <div ng-repeat="(key, data) in f.trigger" ng-if="!(key == 'triggerType')
             && !(key == 'lastCheck')
             && !(key == 'sender')
             && !(key == 'gaid')
             && !(key == 'ctid')
             ">
    
    
    
    现在,如果它们都为真,则返回真,这正是您真正想要的。

    HTML:

    <div ng-repeat="(key, data) in filteredTriggers(f.trigger)">
        <h4>{{key | reformat | capitalize}}:</h4> {{data}}
    </div>
    
    !(key=='triggerType')||!(key=='lastCheck')||!(key=='sender')||!(key=='gaid')||!(key=='ctid')
    始终为真。您需要逻辑AND而不是OR。
    $scope.filteredTriggers = function(triggers) {
        var result = {};
        angular.forEach(triggers, function(value, key) {
            if (['triggerType', 'lastCheck', 'sender', 'gaid', 'ctid'].indexOf(key) == -1) {
                result[key] = value;
            }
        });
        return result;
    }