简体   繁体   English

我如何在angular js中使用ng-repeat遍历json对象数组?

[英]How do i iterate over array of json objects using ng-repeat in angular js?

i am trying to iterate over array of objects in angular js but i am getting error as cannot set property of undefined even though i had defined it. 我正在尝试遍历angular js中的对象数组,但由于无法设置undefined属性(即使我已定义了它),但出现了错误。

Please find my code below : 


var app = angular.module('myDemoApp', []);

    app.service('MyTaskService', function($http) {
        var services = {
            userList: userList,
        };
        function userList(req) {
            if (req == undefined)
                req = {};
            return $http({
                url: "https://jsonplaceholder.typicode.com/posts",
                method: "GET",
                data: req
            });
        }
        return services;
});


app.controller('MyTaskController', function($scope, MyTaskService) {
    $scope.resp  = {};
    $scope.getPrjDetails = function() {
    try {
                var promise = MyTaskService.userList();
                promise.then(function (sucResp) {
                    try {
                       $scope.resp  = sucResp.data;
                    } catch (exception) {
                        console.log(exception);
                        return;
                    }
                }
                , function (errResp) {
                   console.log(errResp);
                    return;
                });
            } catch (exception) {
                console.log(exception);
                return;
            }
    }
});

Find my template : 找到我的模板:

<ul>
   <li ng-repeat="myData in resp">{{myData.id}}</li>
</ul>

how can i iterate over all the json values and display in my textboxes in template or my list? 如何遍历所有json值并显示在模板或列表的文本框中?

<div ng-app="myDemoApp">
    <div ng-controller="MyTaskController">
    <table tyle="float:right;">
        <tr><h3>New Project Form</h3></tr>
        <tr>
            <td class='padding-to-controls'>Get Project Details</td>
            <td class='padding-to-controls'>
                <select ng-change="getPrjDetails()" ng-model="select_project" > 
                    <option value=''>Select Project Details</option>
                    <option value='get-details'>Get Project Details</option>
                </select>
            </td>
        </tr>
        <tr>
            <td class='padding-to-controls'>New Project Name <span>*</span></td>
            <td class='padding-to-controls'> <input type = 'text' ng-model="project_name" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>Assign location to project <span>*</span></td>
            <td class='padding-to-controls'> <input type = 'text' ng-model="assign_location" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>Area </td>
            <td class='padding-to-controls'><input type = 'text' ng-model="area"  ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>City</td>
            <td class='padding-to-controls'><input type = 'text' ng-model="city" ></td>
        </tr> 
         <tr>
            <td class='padding-to-controls'>State </td>
            <td class='padding-to-controls'><input type = 'text' ng-model="state" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>Cluster</td>
            <td class='padding-to-controls'><input type = 'text' ng-model="cluster" ></td>
        </tr> 
         <tr>
            <td class='padding-to-controls'>Region</td>
            <td class='padding-to-controls'><input type = 'text' ng-model="region" ></td>
        </tr> 
         <tr>
            <td class='padding-to-controls'>Type <span>*</span> </td>
            <td class='padding-to-controls'><input type = 'text' ng-model="type" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>Priority <span>*</span></td>
            <td class='padding-to-controls'><input type = 'text' ng-model="priority" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'>Name of approver<span>*</span></td>
            <td class='padding-to-controls'><input type = 'text' ng-model="name_approver" ></td>
        </tr>
         <tr>
            <td class='padding-to-controls'></td>
            <td class='padding-to-controls'><button ng-click="getPrjDetails()">EDIT</button></td>
        </tr>
        </table>
    </div>
</div>

please find link to my json i am trying to access :: https://jsonplaceholder.typicode.com/posts 请找到我正在尝试访问的json的链接:: https://jsonplaceholder.typicode.com/posts

When dom is first rendered, angular start searching for resp.data , which in your case is undefined and so angular will complain. 首次渲染dom时, resp.data开始搜索resp.data ,在您的情况下这是未定义的,因此angular会抱怨。

You don't need to pass $scope variables to any of the controller functions. 您无需将$ scope变量传递给任何控制器函数。 They can access it directly. 他们可以直接访问它。

In your whole code, you are never ever setting $scope.resp . 在您的整个代码中,您永远不会设置$scope.resp

Your html context is way different from what you are trying to do. 您的html上下文与您尝试执行的操作有所不同。 So I have modified it a bit. 所以我做了一些修改。 Try following code: 尝试以下代码:

HTML: HTML:

<div ng-app="myDemoApp">
  <div ng-controller="MyTaskController">
    <h3>Feeds</h3>
    <button ng-click="getPrjDetails()">Load</button>

    <div ng-repeat="myData in resp.data">
      <span> {{myData.id}}</span>
      <input ng-model="myData.title" type="text" />
    </div>

  </div>

Angular

app.controller('MyTaskController', function($scope, MyTaskService) {

  // Required
  $scope.resp = {
    data: []
  }

  $scope.getPrjDetails = function() {
    try {
      var promise = MyTaskService.userList();
      promise.then(function(sucResp) {
        try {
          var resp = sucResp.data || [];

          // You must update $scope.resp.data 
          $scope.resp.data = resp;

          console.log($scope.resp.data);
        } catch (exception) {
          console.log(exception);
          return;
        }
      }, function(errResp) {
        console.log(errResp);
        return;
      });
    } catch (exception) {
      console.log(exception);
      return;
    }
  }

})

fiddle working 小提琴工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM