Search code examples
javascriptangularjsjsoneventbrite

AngularJS iterating through Eventbrite events


My Json file is here. My HomeController is:

app.controller('HomeController', ['$scope', 'events', function($scope, events) {
   events.then(function(data) {
    $scope.events = data;
  });
   $scope.test="success";
}]);

and my html file is:

<a href="#/">Home</a>
<h1>  {{test}}  </h1>
<section class="container" ng-repeat="event in events">

<div class="col-sm-4" >
      <div class="card">
        <img class="img-responsive" src="https://s3.amazonaws.com/codecademy-content/projects/red-eye-photography/p1.jpg" />
        <div class="block">
          <h4 class="card-title">{{event.events[0].name.text}}</h4>
          <p class="card-text">{{event}}</p>
          <a href="#" class="btn btn-primary">Go somewhere</a>
        </div>
      </div>
  </div>

</section>
<h1>{{test}}</h1>

My problem occurs when I am trying to loop over "events" array in the JSON file. I have tried to write "$scope.events = data.events;" in Home controller, " ng-repeat="event in events.events"" or "ng-repeat="event in events[0]"" in html file. This breaks loop and nothing is shown, but if I use "ng-repeat="event in events"" and then variable {{event.events[0].name.text}} in the code later on, it all works fine. I don't understand why there is a problem. It should work fine from my previous experience.


Solution

  • If you declare in your controller

    $scope.events = data.data.events;

    and have such template:

    <section class="container" ng-repeat="event in events">
    
      <div class="col-sm-4">
        <div class="card">
          <img class="img-responsive" src="https://s3.amazonaws.com/codecademy-content/projects/red-eye-photography/p1.jpg" />
          <div class="block">
            <h4 class="card-title">{{event.name.text}}</h4>
            <p class="card-text">{{event}}</p>
            <a href="#" class="btn btn-primary">Go somewhere</a>
          </div>
        </div>
      </div>
    
    </section>
    

    it should work. See codepen here