簡體   English   中英

嵌套在JSON中的數組的AngularJS排序

[英]AngularJS Sorting of array nested in JSON

目標:設置一個表,該表在從我們的服務器返回數據之后可以排序。

服務器返回的數據格式:

{
    "result" : {
        "code" : "OK",
        "msg" : ""
    },
    "data" : [{
            "row" : ["Fred", "64233", "197"]
        }, {
            "row" : ["Steve", "158879", "36"]
        }, {
            "row" : ["Ted", "115222", "12"]
        }
    ]
}

限制:無法更改服務器返回的數據格式。 我想要可排序的數據包含在“行”對象的數組中。 我嘗試做類似的事情

<tr ng-repeat="roll in myWelcome.data" | orderBy:'roll.row[1]'">
   <td>{{ roll.row[0] }}</td><td>{{ roll.row[1] }}</td><td>{{ roll.row[2] }}</td>
</tr>

但這沒用。 有任何想法嗎?

我建議您在從服務器返回數據時對數據進行整理,以提高數據的可用性。 失敗的話,您可以簡單地實現一個自定義過濾器,該過濾器知道在哪里查找。

<tr ng-repeat="roll in myWelcome.data | customOrderBy:1">

過濾:

angular.module("Your_App").filter("customOrderBy", [function() {
    return function(data, index) {
         return data.sort(function(o) {
             return o.row[index];
         });
    };
}]);

我建議將您的數據轉換為更標准的內容。 這將使您能夠更好地維護和推理代碼。

由於您無法更改服務器發送給您的數據格式,因此只需在數據到達客戶端后就可以對其進行更改。

fetchData(results) {
   // Transform the results we get back from the server.
   this.myWelcomeData = results.data.map(function(input) {
      return {
         name: input.row[0],
         id: input.row[1],
         age: input.row[2]
      }
   });
}

然后,您可以使用常規的Angular轉發器語法進行排序:

<tr ng-repeat="roll in myWelcomeData" | orderBy:'id'">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM