AngularJS访问ng-repeat中的JSON文件

时间:2015-11-16 18:03:07

标签: javascript json angularjs

在Angular中这样的事情是可能的,我尝试过搜索,但我不知道要搜索的确切术语,所以首先,我道歉。

我正在成功使用Angular来访问JSON文件。

我的JSON文件包含超过150个事件的列表,每个事件都有一些基本信息,如图像,标题,价格,事件是否已售罄等。

每个事件还包含有关该事件的JSON文件的URL。 此文件包含有关个别事件的更多深入信息,例如位置,难度,轮椅无障碍等。

如何循环使用第一个JSON但仍然提取“嵌入”的信息? JSON文件,以便在一个页面上显示所有信息。

我很难理解如何在ng-repeat中“调用”第二个JSON信息文件。

作为Angular的初学者,我努力寻找正确的术语来帮助自己。

感谢

EDITED -----

我在这里创造了一个我想要实现的部分内容。

http://plnkr.co/edit/zYAhNKdM18pxuK5roPjj?p=preview

<!DOCTYPE html>
<html>


<head>
<style>
#event-list span{display:block;}
#event-list li{clear:both;}
#event-list ul{list-style: none;}
#event-list img{float:left;}

</style>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script>
var app = angular.module("exampleApp", []);

app.controller("eventCtrl", function ($scope, $http, $location) {

  var eventList = "http://ajax.wiggle.co.uk/api/list/events/?ris=1";

  $scope.host = $location.host;
  $scope.wiggleEvents = [];


  $http({
      method: 'JSONP',
      url: eventList + '&callback=JSON_CALLBACK'
  }).success(function (data, status, headers, config) {
      $scope.wiggleEvents = data.Results.Products;


      // data contains the response
      // status is the HTTP status
      // headers is the header getter function
      // config is the object that was used to create the HTTP request
  }).error(function (data, status, headers, config) {
  });
});

</script>

</head>

<body ng-app="exampleApp">
<div ng-controller="eventCtrl">
    <div class="row">
        <div class="col-md-12" id="event-list">
            <ul>
                <li ng-repeat="p in wiggleEvents" >

                    <!-- i need to display a mixture of information from the first JSON file and information from each individual events JSON file -->
                    <img src="" ng-src="{{p.Image}}?w=125&h=125&a=7" />
                    <span class='name'>Title: {{p.Title}}</span>
                    <span>PID: {{p.pid}}</span>

                    <!--Each of these events has an Apirl which is a JSON file of the information on the event -->
                    <span>ApiUrl: {{p.ApiUrl}}</span>

                    <!--AND here i want to add short description of each event. found in the API of each individual event -->
                    <!--AND here i want to add difficulty rating from API of each individual event -->
                    <!--AND here i want to add location area of each individual event  etc etc etc -->
                </li>
            </ul>
        </div>                             
    </div>
</div>    
  </body>
</html>

我可以从主JSON文件中成功获取信息,并在页面中显示24个事件。

主要的JSON文件在这里: http://ajax.wiggle.co.uk/api/list/events/?ris=1

JSON中的每个“产品”都有自己的APIUrl,它自己的JSON文件包含有关该产品的更多信息。

我试图在我的html中输出来自主JSON的一些信息以及来自每个单独的JSON的一些信息。

我真的不知道如何访问每个单独的JSON文件,特别是因为第一个主文件中可能包含不同数量的“产品”。今天恰好是24岁,但明天可能是36岁等。

感谢

3 个答案:

答案 0 :(得分:0)

让我们说你有以下json对象:

myJsonObj= {
   user: {
       firstname : "jane",  
       lastname : "doe"
   },
   friend: {
       firstname: "hancock",
       lastname : "john"
   }
}

要使用ng-repeat迭代属性对象litteral(你的json对象),你必须使用(key,value),如:

<div ng-repeat="(key,value) in myJsonObj">  
    <span ng-bind="key"></span>    // displays "user" , then "friend"
    <span ng-bind="value.firstname"></span>     // displays "jane"  
    <span ng-bind="value.lastname"></span>     // displays doe  
</div>  

在此处阅读有关迭代对象属性的更多信息:ng-repeat

编辑: 你也可以通过将一些数据传递给范围函数来做更多的事情。像

<div ng-repeat="(key,value) in myJsonObj">  
    // assuming retrieveUrl() is a scope function you wrote
    // in order to extract and return the url from the data you passed
    // as parameter
    <span ng-bind="retrieveUrl(value.url)"></span>    
</div>  

答案 1 :(得分:0)

从嵌入在ng-repeat中的数据中的url获取json数据的最佳方法是编写运行$ http GET的指令。像这样:

http://plnkr.co/edit/xFCG1p8WwDw9bt6jO49q?p=preview

HTML

<div ng-repeat="thing in things track by $index">
  <get-url-data url="thing"></get-url-data>
</div>

JS:

app.directive('getUrlData', function() {
  return {
    restrict: 'E',
    template: '<div>{{vm.jsonData}}</div>',
    scope: {
      url: '=?'
    },
    controllerAs: 'vm',
    bindToController: true,
    controller: function($http) {
      vm = this;
      $http.get(vm.url).then(function(response) {
        vm.jsonData = response;
      });
    }
  };
});

答案 2 :(得分:0)

我设法找到了这个问题的答案。 我在这个stackoverflow帖子中跟随选择的答案:

How to bind multiple JSON files in ng-repeat (AngularJS)?

这是以我理解的方式编写的,当我遵循它时,它对我有用。