基于JSON中的键的ng-repeat - AngularJS

时间:2017-12-31 14:14:26

标签: javascript php angularjs json

我正在处理一个项目,我从 Google跟踪代码管理器API 填充一些JSON,并将此数据发送到AngularJS中编写的前端。

现在,我在 AngularJS Material 的卡片上使用ng-repeat,并且无法想到实际填充ng-repeat的方法,就像 Google跟踪代码管理器一样,我填充的方式是这样的:

<div class='md-padding' layout="row" layout-wrap>
    <md-card flex="45" flex-sm="100" flex-md="100" flex-xs="100"
             ng-repeat="container in containers | toArray:false |  filter:container">

        <md-toolbar>
            <div class="md-toolbar-tools">
                <h1 class="md-display-3">{{container.account_name}}</h1>
            </div>
        </md-toolbar>
  <md-card-title>

(...) here comes some table code...

主要是ng-repeat"container in containers"

这给了我这个结果: enter image description here

正如您所看到的,ng-repeat为每个帐户创建了一张卡片,我想要的是,如果"container.accountId"相同,则填充在同一<md-card>内。

我想要的是这样:(忽略这与卡上的结构不同,这是googletagmanager.com)

enter image description here

正如您所看到的,"Account2"同时"containers"内有md-card A_place = 10km B_place=5km #A_place=2km C_place=1km

希望有人可以帮助我,谢谢!

2 个答案:

答案 0 :(得分:0)

在component.ts文件中构造一个类似[string,array [&#34; string&#34;]]的地图。

这里

key =容器帐户名称 value =具有相同容器帐户名称的容器对象列表

在视图文件中使用该地图,如

<md-card ng-repeat="mapobject of map" ..
// heading(mapobject.key)
// repeat using mapobject.value
</md-card>

这可以解决您的问题

答案 1 :(得分:0)

所以我用https://github.com/a8m/angular-filter#groupby

提供的groupBy过滤器解决了这个问题

所以我这样使用它:

<div class='md-padding' layout="row" layout-wrap>
    <md-card flex="45" flex-sm="100" flex-md="100" flex-xs="100"
             ng-repeat="(key, value) in containers | groupBy: 'account_name'">

使用基于(key,value)

groupBykey(account_name)

谢谢:)