【问题标题】:Looping through json using angularjs使用angularjs循环遍历json
【发布时间】:2017-11-23 22:49:39
【问题描述】:

我有一个复杂的 JSON 对象,我必须从中循环遍历它并在表单中呈现数据。为此,我创建了一个像这样的小服务:

service.myApprovalResults = function(){
        var url = "../data/myapprovals.json";
        return $http.post(url).success(function(response) {
         $rootScope.names = response;
        });
    };

以下是我的 JSON 文件:

{
    "result": [
        {
                    "Approval": {
                        "Id":"111",        // Unique Id
                        "Api":"api/sometihgn/111"
                     },
                    "Ticket":{
                    "Id":"TKT1000011",
                    "API":"api/ticket/TKT1000011"
                    },
                    "TicketItem":{
                    "Id":"RITM1000011",
                    "API":"api/ticket_item/RITM1000011"
                    },
                    "ProcessStep":"",
                    "Description":"Need Approval For sdsadas",  // See Note Section
                    "VariablesSet":// See Note Section
                        [         // VariableSet details.
                            { 
                                "Question":"Joining Date",
                                "Name": "joining_date",
                                "Id":"13",
                                "Value": ["12:12:2014"],
                                "DisplayValue":[""],
                                "Reference":""
                            },
                            {
                                "Question":"Reporting Manager",
                                "Name": "reporting_manager",
                                "Id":"14",
                                "Value": ["samd"],
                                "DisplayValue":["/Sam Doni"],
                                "Reference":"/api/user"
                            },
                            {
                                "Question":"Department",
                                "Name": "department",
                                "Id":"15",
                                "Value": ["IT Security"],
                                "DisplayValue":[""],
                                "Reference":""
                            },

                            {
                                "Question":"Accessories Needed?",
                                "Name": "accessories",
                                "Id":"16",
                                "Value": ["laptop","mouse"],
                                "DisplayValue":[""],
                                "Reference":""
                            }
                        ],                             
                    "ApprovalFor": {   
                        "Name": "Sam Doni",
                        "UserName": "samd",
                        "Email":"samd@test.com",
                        "Api": "api/user/samd" // Api can be used to get more details
                     },
                    "Approver":{    // Optional
                        "Name": "sdsdsdsad",
                        "UserName": "sdsdsad",
                        "Email":"sadsads@dssdf.com",
                        "Api": "api/user/dssds" // Api can be used to get more details
                     },
                    "State": "Requested",
                    "Group": "",// Optional
                    "CreatedBy": {
                        "Name": "sadsdsddsa",
                        "UserName": "sdsd",
                        "Email": "sdsad@test.com",
                        "Api": "api/user/sadsadsa"
                    },
                    "CreatedOn": "2016-11-09T17:29:01Z",
                    "UpdatedOn": "2016-11-09T17:29:01Z",
                    "CommentsSet": [{
                            "Id": "10",
                            "TicketItem": "RITM1001011",
                            "Type": "approvalnote",
                            "Value": "User has issues related to access",
                            "CreatedOn": "2016-11-09T17:29:01Z",
                            "CreatedBy": {
                                "Name": "sdsdsadsadd",
                                "UserName": "dsdsad",
                                "Email":"sdsad@test.com",
                                "Api": "api/user/ssddsad"
                            }
                        },
                        {
                            "Id": "11",
                            "TicketItem": "RITM1001011",
                            "Type": "approvalnote",
                            "Value": "Issue is solved",
                            "CreatedOn": "2016-11-08T17:29:01Z",
                            "CreatedBy": {
                                "Name": "dsadsdsad
                                "UserName": "sdsadas",
                                "Email":"dsads@test.com",
                                "Api": "api/user/sadsadsadsa"
                            }
                        }
                    ]
                 },
                {
                    "Approval": {
                        "Id":"112",     
                        "Api":"api/approval/112"
                     },
                    "Ticket":{
                    "Id":"TKT1000013",
                    "API":"api/ticket/TKT1000013"
                    },
                    "TicketItem":{
                    "Id":"RITM1000021",
                    "API":"api/ticket_item/RITM1000021"
                    },
                    "ProcessStep":"",
                    "Description":"Add user to Helpnow Group",// See Note Section
                    "VariablesSet":// See Note Section
                        [
                            { 
                                "Question":"Location Service Needed",
                                "Name": "location",
                                "Id":"16",
                                "Value": ["11"],
                                "Reference":"/api/location";
                            },
                            {
                                "Question":"What is the issue",
                                "Name": "service_needed",
                                "Id":"18",
                                "Value": ["aloha"]
                                "DisplayValue":[""],
                                "Reference":""
                            }
                        ],                     
                    "ApprovalFor": {   
                        "Name": "dsfdsfdsf",
                        "UserName": "dfdsf
                        "Email":"dfdsfds@gmail.com",
                        "Api": "api/user/rsds// Api can be used to get more details
                     },
                    "Approver":"",
                    "State": "Requested",
                    "Group": {
                             "Name": "FIN Group",
                             "Id":"10"
                            "Api": "api/group/10"// Unique Group ID in SAP
                        }

             }
     ]
}

使用这个 JSON,我需要循环并在表单中显示 JSON 数据。我在下面添加了以下代码:

<ul>
        <li ng-repeat="x in names">
            {{ x.result.Approval.Id }}, {{ x.result.Ticket.Id }}, {{x.result.TicketItem.Id}}, {{x.result.Description}}
        </li>
    </ul>

完成了上述操作,但我无法看到表单中的数据。

我检查了 chrome 开发者工具,并且 JSON 加载正确。 有人可以推荐我吗?

【问题讨论】:

  • ng-repeat 仅适用于 Array,不适用于 Object。
  • 再次检查 JSON 响应是否有效
  • @Ved - ng-repeat 也可以处理对象。
  • @31piy ng-repeat with object 就是这样工作的。 (key,val) in object。所以从技术上讲,它只适用于 Array。

标签: html angularjs json


【解决方案1】:

首先,检查是否在声明时将$rootScope.names 分配为空数组。如果是这种情况,请尽可能仅在服务中直接声明和分配它(以避免数据结构进一步复杂化)。

根据您的 JSON 结构,您的代码应如下所示:

<ul>
 <li ng-repeat="x in names.result">
  {{ x.Approval.Id }}, {{ x.Ticket.Id }}, {{x.TicketItem.Id}}, {{x.Description}}
 </li>
</ul>

此外,为避免这种复杂程度,请尝试从下一次开始重构您的 JSON 和响应存储:)

【讨论】:

  • Sriram,我在响应进入之前分配了一个空数组,当我打开 DOM 时,它给了我这个标签
  • 尝试将names.result修改为$root.names.result.如果不行就试试logging:$rootScope.names.result[0].Approval.Id来验证我建议的解析是否正确。
  • 试过这个 $rootScope.names.result[0].Approval.Id 但得到这个 Uncaught ReferenceError: $rootScope is not defined at :1:1
  • 你在哪里记录的?您是否将$rootScope 注入到函数中?
  • 添加了这个服务... service.myApprovalResults = function(){ var url = "../data/myapprovals.json"; return $http.get(url).success(function(response) { var names = []; $root.names = response; console.log($root.names.result); console.log($rootScope.names.结果[0].Approval.Id); });
【解决方案2】:

您错误地遍历数据。我相信您想在数组中显示详细信息。

您需要将x in names 更改为x in names.result。然后,将您的表达式更改为直接使用x,如下所示:

{{ x.Approval.Id }}, {{ x.Ticket.Id }}, {{x.TicketItem.Id}}, {{x.Description}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多