AngularJS:在循环中过滤多个未压缩的项目之一

时间:2014-03-12 18:37:01

标签: arrays angularjs filter

我有一组嵌套的JSON对象,它们都有相同的键,所以我只是取第一个,并将其值解压缩到(key,val)中,以便对它们进行编辑。

{ 'tweedle beetle': { action: battle,
                      item: paddle,
                      color: blue },
  'poodle':         { action: eating,
                      item: noodles,
                       color: white },
  'bottle':         { action: sitting,
                      item: poodle,
                      color: transparent },
  'fox':            { action: watching,
                      item: battle,
                      color: red }
}

但并非所有按键都可编辑。所以我有一个可编辑字段列表:

$scope.editableFields = ['item', 'color']; 

循环浏览第一条记录时,我只想显示editableFields。如何添加"键"将过滤项目作为要过滤的项目,因为我将项目拆分为两个值?我只想要一个可编辑项目的键列表。也许有更好的方法来解决这个问题,而不是采取项目[0]?

<dl class="dl-horizontal">
    <dt ng-repeat-start="(key,val) in items[0] | filter:editableFields">
        {{key}}
    </dt>
    <dd ng-repeat-end>
        <input class="form-control input-md" type="text" value="{{val}}" />
    </dd>
</dl>

这是一个批量编辑器。我有要使用新值更新的项目列表,但我只需要向用户显示一次选项。

1 个答案:

答案 0 :(得分:0)

我同意JoseM你不能这样做,但这是一个可能有用的类似例子:

<div ng-repeat="(key, data) in commands | orderObjectBy:'pos'">{{data.pos}} - {{key}}</div>

$scope.commands = {
        "xyz" : {
            "group":"g2",
            "pos":2
        },
        "abc" : {
            "group":"g2",
            "pos":3
        },
        "ijk" : {
            "group":"g1",
            "pos":1
        }
    };

.filter('orderObjectBy', function() {
  return function(items, field, reverse) {
    var filtered = [];
    angular.forEach(items, function(item) {
      filtered.push(item);
    });
    filtered.sort(function (a, b) {
      return (a[field] > b[field]);
    });
    if(reverse) filtered.reverse();
    return filtered;
  };
});