停止AngularJS按字母顺序重复渲染

Stop AngularJS ng-repeat rendering in alphabetical order

本文关键字:顺序 AngularJS 停止      更新时间:2023-09-26

在我的angular应用程序中,我试图在表中显示JSON数据。数据如下所示:

$scope.data = 
  {
    "EVENT NAME":"Free Event",
    "ORDER ID":311575707,
    "DATE":"6/26/14",
    "GROSS REVENUE (USD)":"0",
    "TICKET REVENUE (USD)":"0",
    "EVENTBRITE FEES (USD)":"0",
    "CC PROCESSING (USD)":"0",
    "TICKETS":1,
    "TYPE":"Free Order",
    "STATUS":"Free Order",
    "TRANSACTION ID":"",
    "NOTES":"",
    "FIRST NAME":"Khee Seng",
    "LAST NAME":"Chua",
    "EMAIL ADDRESS":"email@anemailadderss.com"
  };

我像这样显示它:

   <table class="table table-striped selector">
      <tbody>
        <tr>
          <td ng-repeat="(key, value) in data">
            <strong>{{key}}</strong>
          </td>
        </tr>
        <tr>
          <td ng-repeat="(key, value) in data">
                    {{value}}
                </td>
        </tr>
      </tbody>
    </table>

在我看来,这应该遍历对象中的每个'(键,值)对并按顺序显示。但是,AngularJS会按字母顺序显示这些值。

下面是复制这个问题的plunkr: http://plnkr.co/edit/V3Y2ZuwV1v9Pzsl0jGhA?p=preview

我如何调整代码,使其以对象实际进入的自然顺序显示?

您可以这样实现

演示工作

在作用域中定义一个方法,如下所示

$scope.notSorted = function(obj){
    if (!obj) {
        return [];
    }
    return Object.keys(obj);
}

和HTML中如下所示

<table class="table table-striped selector">
  <tbody>
    <tr>
      <th ng-repeat="key in notSorted(data)">
         {{key}}
      </th>
    </tr>
    <tr>
      <td ng-repeat="key in notSorted(data)" ng-init="value = data[key]">
            {{value}}
         </td>
    </tr>
  </tbody>
</table>

原文:ng-repeat with no sort?如何?

Javascript对象没有键的"自然顺序"的概念:

来自ECMAScript第三版(这里)的对象定义:

4.3.3对象对象是object类型的成员。它是一个无序的属性集合每一个都包含一个基本值、对象或函数[…]

你可能应该稍微改变一下你的数据结构…
例如:

$scope.data = 
{
    1: { "EVENT NAME": "Free Event" },
    2: { "ORDER ID": 311575707 },
    /* ... */
};

然后使用数字键对项目进行排序…

对象属性没有自然顺序

你可以用一个稍微不同的Object来达到你想要的效果:

$scope.data = 
  {
    columns: [
      {
        "EVENT NAME":"Free Event",
        "priority": 0        
      },
      {
        "ORDER_ID":311575707,
        "priority": 1        
      },
      ...
    ]
  }