2016-06-13 5 views
0

Dans la table, chaque ligne est associée à une case à cocher et une option permet de cocher toutes les lignes. Je veux obtenir les lignes sélectionnées id de la table dans le tableau.Dans le tableau, obtenez l'identifiant de ligne sélectionné dans le tableau

Voici plunker code.

HTML:

<table id="datatable-buttons" class="table table-striped table-bordered"> 
            <thead> 
             <th> 
               <input type="checkbox" ng-model="selectRowId" ng-click="selectedAll()"> 
             </th> 
            </thead> 
            <tbody ng-init="get_product()"> 
             <!--step 6--> 
             <tr ng-repeat="product in filtered = (pagedItems| filter:search | orderBy : predicate :reverse) | startFrom:currentPage * entryLimit | limitTo:entryLimit | findobj:multipleVlaue | searchFor:searchString"> <!-- searchFor:searchString --> 
              <td> 
               <input type="checkbox" ng-model="selctedIds[product.id]" ng-checked="product.deleted"> 
              </td> 
             </tr> 
            </tbody> 
           </table> 

Controller:

$scope.selectedAll = function() { 
    $scope.pagedItems.forEach(function (product) { 
     if ($scope.selectRowId) { 
      product.deleted = true; 
     } else { 
      product.deleted = false; 
     } 
    }); 
} 
+0

essayez d'utiliser 'index' de $ pour obtenir l'indice de l'élément à l'intérieur de ng-repeat. '$ index' est en fait le décalage de l'itérateur de l'élément répété (0..length-1) –

+0

J'ai essayé mais je ne suis pas sélectionné ids @ avantika-saini –

+0

pouvez-vous s'il vous plaît modifier dans Plunker –

Répondre

3

Si vous voulez quelque chose évolutive qui accueille des choses comme le filtrage complexe, pagination, etc. alors je vous suggère d'écrire une propriété angulaire à chaque objet. Donc, pour la case que nous voudrions passer cette valeur booléenne comme ceci:

<input type="checkbox" ng-model="item.$selected"/> 

Pour votre bascule tout/rien, vous devez taper sur une fonction de contrôleur:

$scope.toggleAll = function(bSelect){ 
    itemArray.forEach(function(item){ item.$selected = bSelect; }) 
} 

La raison pour laquelle je suggérer de préfixer votre valeur sélectionnée avec un $ comme $selected est que tous les appels HTTP que vous faites avec les objets, Angular dépouillera tout $property avant de convertir en JSON, juste au cas où votre backend a un problème.

Je vous recommande d'utiliser un filtre pour tirer les ID:

<div>{{ itemArray | getSelIds }}</div> 

et le filtre

.filter('geSeltIds', function(){ 
    return function(items){ 
     //if you happen to use lodash 
     return _.chain(items).filter({$selected:true}).map('id').value() 

     //manual 
     ids = [] 
     items.forEach(function(item){ 
      if(item.$selected) 
       ids.push(item.id) 
     }) 
     return ids 
    } 
}) 
+0

J'apprécie votre suggestion. que fait-il: return _.chain (items) .filter ({$ selected: true}). map ('id') –

+0

Si vous utilisez la bibliothèque lodash, vous pouvez enchaîner plusieurs fonctions. Cela cible simplement le tableau d'éléments, filtre et transmet un tableau où $ selected est vrai, puis mappe les identifiants des éléments filtrés. – jusopi

+3

Plutôt que d'ignorer votre demande, je vais vous expliquer pourquoi je dois refuser respectueusement. a) Je commence ma journée de travail et je ne peux pas consacrer assez de temps à votre exemple. b) Je préfère que vous appréciez les avantages de la résoudre par vous-même en utilisant les outils fournis dans ma réponse et d'autres sur ce site Internet. Vous conserverez et comprendrez mieux une fois que vous l'aurez reconstitué. – jusopi

0

Ce filtre est plus propre:

.filter(function (item) { 
      return item.$selected; 
    }).map(function (item) { return item.id });