【问题标题】:if condition in ng-repeat on a variable如果条件在 ng-repeat 中对变量
【发布时间】:2016-01-04 09:16:45
【问题描述】:

我从 sql 查询中获取 angularjs 中的数据为:

{"orders":[
{
    "orderId":"1674","itemId":"468","SubTotal":"40.00","Total":"48.98","Status":"Printed","Title":"Mangled : Large","Quantity":"1","dateCreated":"2009-06-03"
},
{
    "orderId":"1674","itemId":"469","SubTotal":"40.00","Total":"48.98","Status":"Printed","Title":"Skull Collage : Large","Quantity":"1","dateCreated":"2009-06-03"
},
{
    "orderId":"1675","itemId":"33949","SubTotal":"40.00","Total":"48.98","Status":"Printed","Title":"Summerside \"The Saved\" EP CD -Red or Blue! : BLUE","Quantity":"1","dateCreated":"2009-06-03" 
},
{
    "orderId":"1674","itemId":"33954","SubTotal":"40.00","Total":"48.98","Status":"Printed","Title":"Summerside \"The Saved\" EP CD -Red or Blue! : RED","Quantity":"1","dateCreated":"2009-06-03"
}]}

现在我想知道有多少条记录具有相同的 orderId,以便我可以将它们放在相同的 section/div 和将其显示为 1 个组。

我正在使用 ng-repeat 来显示数据。

<div ng-repeat="order in itemorders">
<div class="order-lis-box border-radius">
    <div class="up line overflow-hidden text">
        <div class="fl black mb10">Order No. <span>{{ order.orderId }}</span><br><span class="capitalize grey F14 bold">Rs. {{ order.Total }}</span></div>
        <div class="custom-datetime text-right">{{ order.dateCreated }}</div>
    </div>
    .
    .
    .
</div> <!-- order-lis-box -->

我应该添加什么用途以便显示我想要的方式?

【问题讨论】:

标签: javascript php angularjs


【解决方案1】:

你为什么不创建一个Javascript 函数来将你的JSON 对象更改为

{
    "orders":
    [
        {
            "orderId":"1674",
            "items" : 
            [
                {
                    "itemId":"468",
                    "SubTotal":"40.00",
                    "Total":"48.98",
                    "Status":"Printed",
                    "Title":"Mangled : Large",
                    "Quantity":"1",
                    "dateCreated":"2009-06-03"
                },
                {
                    "itemId":"469",
                    "SubTotal":"40.00",
                    "Total":"48.98",
                    "Status":"Printed",
                    "Title":"Skull Collage : Large",
                    "Quantity":"1",
                    "dateCreated":"2009-06-03"
                },
                {
                    "itemId":"33954",
                    "SubTotal":"40.00",
                    "Total":"48.98",
                    "Status":"Printed",
                    "Title":"Summerside \"The Saved\" EP CD -Red or Blue! : RED",
                    "Quantity":"1",
                    "dateCreated":"2009-06-03"
                }
            ]
        },
        {
            "orderId":"1675",
            "items" : 
            [
                {
                    "itemId":"33949",
                    "SubTotal":"40.00",
                    "Total":"48.98",
                    "Status":"Printed",
                    "Title":"Summerside \"The Saved\" EP CD -Red or Blue! : BLUE",
                    "Quantity":"1",
                    "dateCreated":"2009-06-03" 
                }
            ]
        }
    ]
}

然后您的HTML 文件将更容易操作

<div ng-repeat="order in itemorders">
<div class="order-lis-box border-radius">
    <div class="up line overflow-hidden text">
        <div class="fl black mb10">Order No. <span>{{ order.orderId }}</span><br><span class="capitalize grey F14 bold">Rs. {{ order.Total }}</span></div>
        <div class="custom-datetime text-right">{{ order.dateCreated }}</div>
    </div>
     <div class="up line overflow-hidden text" ng-repeat="item in order.items">
        <div class="fl black mb10">Item Id<span>{{ item.itemId }}</span><br></div>
        .
        .
        .
    </div>
</div>

【讨论】:

  • 我可以用 PHP 做吗?并将数据以相同的形式返回到 HTML。不错 1.
  • 是的,您可以使用 PHP。
  • 好的,谢谢。看起来是可行的。你能帮我看看怎么做吗?
  • 当然。是否可以从您带来数据的地方获取 PHP ?
  • 看起来很复杂。我会尽力让你知道;)
【解决方案2】:

要完成类似的事情,您可以使用angular.filter,然后使用 GroupBy 函数。

在你的应用中注入anular-filter后,你只需要

<div ng-repeat="(key,value) in orders | groupBy: 'orderId'">
    <div class="fl black mb10">Order No. <span>{{ key }}
    <div class="order-lis-box border-radius" ng-repeat="order in value">
    <div class="up line overflow-hidden text">
    </span><br><span class="capitalize grey F14 bold">Rs. {{ order.Total }}</span></div>
    <div class="custom-datetime text-right">{{ order.dateCreated }}</div>
</div>
.
.
.
</div>

这里是plunker,其中包含您的案例示例。

【讨论】:

  • 是的!你快到了,但我怎么知道 orderId 已经改变并且需要新的 div 来获取新的 orderId !!谢谢:)
  • @Asmita 我已经更新了我的 plunker 和代码,看看是否更适合你。
  • 嘿,太好了!! :) 非常感谢..我是角度方面的新手......它帮助了我!我会试试这个,如果我卡住了,请在这里跟踪! ;)
  • 对于新问题,您应该打开新问题。如果这解决了您的问题,请考虑接受答案
  • 是的,我只是在尝试这个关于同一个问题!当然可以接受!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
相关资源
最近更新 更多