如何只在ngRepeat中重复“key”一次(AngularJS)

时间:2015-09-22 12:33:42

标签: javascript angularjs angularjs-ng-repeat ng-repeat angularjs-controller

问题在于来自后端/数据库的JSON数组响应。我正在以正确的json格式获取数据库的响应:

[
  0: {
       "Grade": 100,
       "AB001": 1,
       "AB002": 0,
       "AB003": 9,
       "AB004": 5
     },
  1: {
       "Grade": 98,
       "AB001": 3,
       "AB002": 0,
       "AB003": 0,
       "AB004": 0
     }
...
] (10 objects as result)

当您单击GET请求的响应时,在Firebug控制台中显示。要检索用双引号表示的键,我在视图中使用了ngRepeat指令,如下所示:

<thead>
  <tr ng-repeat="d in data">
      <th ng-repeat="(key, value) in d">
          {{key}}
      </th>
  </tr>
</thead>
...

唯一的问题是,密钥重复10次。但是我想重复一次密钥,这意味着例如密钥Grade在th-tag中只有一次,依此类推......

我该如何实现?我用angular forEach()尝试了它,但它不是解决方案。

3 个答案:

答案 0 :(得分:4)

如果阵列中的每个对象都有完全相同的键,则可以通过以下方式实现:

<thead>
  <tr>
    <th ng-repeat="(key, value) in data[0]">
        {{key}}
    </th>
  </tr>
</thead>

在你的代码片段中,您正在为数组中的每个元素执行双循环,列出每个键。

答案 1 :(得分:1)

您可以使用AngularUI中的唯一过滤器(此处提供源代码:AngularUI unique filter)并直接在ng-options(或ng-repeat)中使用。

试试这个:

<thead>
  <tr ng-repeat="d in data">
      <th ng-repeat="(key, value) in d | unique:'key'">
          {{key}}
      </th>
  </tr>
</thead>

答案 2 :(得分:0)

这个答案可能对你有帮助

<Trigger Property="IsKeyboardFocused" Value="true">
    <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
</Trigger>
<DataTrigger Binding="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type Grid}}"
             Value="True">
    <Trigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource Storyboard1}" />
        <BeginStoryboard Storyboard="{StaticResource StoryboardTextAnimation}" />
    </Trigger.EnterActions>
</DataTrigger>