2016-10-11 7 views
0

Ich habe ein JSON-Objekt, das ich durch jedes Objekt im Array durchlaufen müssen. Ich bin derzeit in der Lage, alle Gegenstände zu zeigen, muss aber nur die erste beim Laden zeigen können. Beim Klicken auf die Schaltfläche muss zum nächsten Objekt im Array iteriert werden, und nur das nächste Objekt wird angezeigt, und so weiter.Durch JSON-Objekt mit Angular

Als Beispiel für diese Funktionalität: http://jsbin.com/veyegihogi/edit?html,js,output

Das aktuelle Setup:

JavaScript:

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

app.controller('portfolioController', function($scope, $http) { 
    $scope.indexToShow = 0; 
    $http.get("shows.json") 
     .then(function(response) { 
     console.log(response); 
     $scope.results = response.data; 
     }); 
     $scope.change = function(){ 
     $scope.indexToShow = ($scope.indexToShow + 1) % $scope.results.length; 
    }; 
}); 

Markup:

<div id="images" ng-repeat="items in results"> 
     <div class="col-lg-2 col-md-2 col-sm-2"> 
      <img src="{{items.image_url}}" alt="{{items.title}}"> 
     </div> 
</div> 
<div class="simple-button" ng-click="change()">click me!</div> 

Beispieldaten:

[ 
    { 
    "id": 1, 
    "title": "title 1", 
    "count": 14, 
    "image_url": "images/image.jpg" 
    }, 
    { 
    "id": 2, 
    "title": "title 2", 
    "count": 10, 
    "image_url": "images/image2.jpg" 
    }, 
    { 
    "id": 3, 
    "title": "title 3", 
    "count": 8, 
    "image_url": "images/image3.jpg" 
    } 
] 
+0

Ich sehe nicht ein 'ng-click' in Ihr Markup? Auch 'product_image_url' stimmt nicht mit seinen Objekten' image_url' überein. Desweiteren ... sehe ich keinen Grund $ 'scope.change' in Ihrem' $ http.get() ' –

+1

zu haben. Auch ist das ng-repeat eine Voraussetzung wenn es wirklich so ist soll nur der nächste auf Klick zeigen? – defaultcheckbox

+0

'src =" {{items [indexToShow] .product_image_url}} "und entfernen ng-repeat. Es scheint offensichtlich! Was ist das für dich verwirrend? – sabithpocker

Antwort

0

Sie haben alle den Code bereit dafür;)

Sie wollen einfach nur diese Ansicht Teil statt Ihrer ng-repeat

<div id="images"> 
     <img src="{{results[indexToShow].image_url}}" alt="{{results[indexToShow].title}}"> 
</div> 
<div class="simple-button" ng-click="change()">click me!</div> 
+0

Dies ist, was ich suchte, danke! Ein Teil des Problems, den ich vergessen habe, der ursprünglichen Frage hinzuzufügen, war das Hinzufügen einer Schaltfläche, die für jedes der Objekte im Array unter dem Hauptbildbereich angezeigt wird, wobei jedes die ID des Bildes hat, das beim Klicken angezeigt werden soll. – user3438917

+0

Ich bin mir nicht sicher zu verstehen, was Sie wollen? –

+0

Also sollte für jedes der verfügbaren Objekte in der JSON-Datei Schaltflächen unter dem aktuell angezeigten Element sein. Wenn Sie auf eins klicken, wird der entsprechende Inhalt dieser ID angezeigt. Anstelle eines einzelnen "nächsten" Knopfes wird es also eine Schaltfläche für jeden verfügbaren Gegenstand sein. – user3438917

0

Wenn Sie mit Ihrem jsbin haften möchten ...

<div id="images" ng-repeat="item in results track by $index" ng-show="$index == indexToShow"> 
     <div class="col-lg-2 col-md-2 col-sm-2"> 
      <img src="{{item.image_url}}" alt="{{item.title}}"> 
     </div> 
</div> 
<div class="simple-button" ng-click="change()">click me!</div> 
+0

Entfernen Sie einfach die ng-Wiederholung ..., die keinen Sinn machen. –

+0

Ich weiß, aber ich war mir nicht sicher, ob der Repeater eine seltsame Anforderung war (siehe meine Kommentare oben), also stellte ich eine Lösung mit dem Repeater auf die gleiche Weise zur Verfügung wie die referenzierte jsbin. – defaultcheckbox

0

Kann einen Bereich Variable für selectedItem gesetzt und tun, um die Indizierung in Controller

$scope.results = response.data; 
$scope.selectedItem = $scope.results[0]; 

$scope.change = function(){ 
    var currIdx = $scope.results.indexOf($scope.selectedItem), 
     nextIdx = currIdx+1 <= $scope.results.length-1 ? currIdx+1 : 0; 

    $scope.selectedItem=$scope.results[nextIdx ]; 
}; 

Ansicht

<img src="{{selectedItem.product_image_url}}"...> 

Um Pager-Tasten eingestellt ausgewähltes Element in ng-click oder gibt item auf eine Funktion, und legen Sie es in der Steuerung zu erstellen:

<span ng-repeat="item in results" 
     ng-class="{active: item == selectedItem}}" 
     ng-click="selectedItem = item">{{$index+1}}</span> 
Verwandte Themen