2016-08-06 1 views
0

ich eine Zeile Code haben:Count Iterationen und zeigen Zahl nur einmal nach Befriedigung ng-wenn in ng-repeat AngularJS

<div ng-repeat="ticket in scope.tickets track by $index" ng-if="ticket.film_id == film.id"> {{$index}} Ticket(s)</div> 

Aktuell zeigt dies den Index und wiederholt das div-Element, aber ich möchte die Zählung für jede Stelle und ich möchte nur die letzte Zählung für jedes ng-wenn zeigen, so dass es so am Ende aussieht:

4 Ticket(s) 
2 Tickets(s) 
3 Tickets(s) 

Irgendwelche Ideen? Vielen Dank.

+0

Machen Sie die Daten Transformation in einem Controller oder besser in einer Fabrik ... Benutzt du zufällig lodash? – shaunhusain

+0

Verwenden Sie die ng-Wiederholung, um die Elemente zu zählen, die das if übergeben? Sie können es mit einem Filter tun, wie hier erklärt: http://stackoverflow.com/questions/26087509/angularjs-count-filtered-items?answertab=votes#tab-top – imazzara

+0

Bitte geben Sie weitere Informationen. Sind Sie in einem verschachtelten 'ngRepeat'? Wäre toll, wenn Sie die Quelle auch hinzufügen könnten. – developer033

Antwort

0

Nun, was ich aus Ihrer Frage habe, ist, dass Sie versuchen, die Objekte in der inneren ngRepeat zu zählen, so können Sie die nativenfilter verwenden.

Sie nur das Ergebnis der filtered Elemente zuschreiben müssen die as Ausdruck verwenden, wie unten:

<div ng-repeat="ticket in tickets | filter: { film_id: film.id }: true as filtered track by $index"> 

hier ein einfacheDemo:

(function() { 
 
    'use strict'; 
 

 
    angular 
 
    .module('app', []) 
 
    .controller('MainCtrl', MainCtrl); 
 

 
    MainCtrl.$inject = ['$scope']; 
 

 
    function MainCtrl($scope) { 
 
    $scope.films = []; 
 
    $scope.tickets = [ 
 
     { 
 
      "film_id":"id 1", 
 
      "name":"ticket 1" 
 
     }, 
 
     { 
 
      "film_id":"id 1", 
 
      "name":"ticket 2" 
 
     }, 
 
     { 
 
      "film_id":"id 1", 
 
      "name":"ticket 3" 
 
     }, 
 
     { 
 
      "film_id":"id 1", 
 
      "name":"ticket 4" 
 
     }, 
 
     { 
 
      "film_id":"id 2", 
 
      "name":"ticket 5" 
 
     }, 
 
     { 
 
      "film_id":"id 2", 
 
      "name":"ticket 6" 
 
     }, 
 
     { 
 
      "film_id":"id 3", 
 
      "name":"ticket 7" 
 
     }, 
 
     { 
 
      "film_id":"id 3", 
 
      "name":"ticket 8" 
 
     }, 
 
     { 
 
      "film_id":"id 3", 
 
      "name":"ticket 9" 
 
     } 
 
    ]; 
 
    
 
    // 4 Films with id = 1, 3 films with id = 3, 2 films with id = 2 
 

 
    function loadFilms(max) { 
 
     var i = 0; 
 
     while(i++ < max) { 
 
     $scope.films.push({ 
 
      "id": "id " + i, 
 
      "name": "film " + i 
 
     }) 
 
     } 
 
    } 
 

 
    loadFilms(10); 
 
    } 
 
})();
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> 
 
</head> 
 

 
<body ng-controller="MainCtrl"> 
 
    <div ng-repeat="film in films track by $index"> 
 
    <span ng-bind="film.id"></span> 
 
    <div ng-repeat="ticket in tickets | filter: { film_id: film.id }: true as filtered track by $index"> 
 
    </div> 
 
    <!-- to show 0 tickets just remove the ng-if check below --> 
 
    <span ng-if="filtered.length" ng-bind-template="{{filtered.length}} Ticket(s)"></span> 
 
    </div> 
 
</body> 
 

 
</html>

+0

Das war die Antwort, die ich suchte. Vielen Dank. – joshuar500

Verwandte Themen