Je veux utiliser l'index de la liste parent (foos) comme argument pour un appel de fonction dans la liste enfant (foos.bars).
J'ai trouvé un article où quelqu'un recommande d'utiliser $ parent. $ Index, mais ce $index
n'est pas une propriété de $parent
.
Comment puis-je accéder à l'index du parent ng-repeat
?
<div ng-repeat="f in foos">
<div>
<div ng-repeat="b in foos.bars">
<a ng-click="addSomething($parent.$index)">Add Something</a>
</div>
</div>
</div>
Réponses:
Mon exemple de code était correct et le problème était autre chose dans mon code actuel. Pourtant, je sais qu'il était difficile de trouver des exemples de cela, donc je réponds au cas où quelqu'un d'autre regarderait.
la source
ng-if
dans le code comme je viens de le découvrir.ng-if
nécessite une$parent
référence supplémentaire . M'a sauvé des maux de tête.Selon les documents ng-repeat http://docs.angularjs.org/api/ng.directive:ngRepeat , vous pouvez stocker la clé ou l'index du tableau dans la variable de votre choix.
(indexVar, valueVar) in values
pour pouvoir écrire
Un niveau vers le haut est encore assez propre avec $ parent. $ Index mais plusieurs parents vers le haut, les choses peuvent devenir compliquées.
Remarque:
$index
continuera d'être défini à chaque portée, il n'est pas remplacé parfIndex
.la source
$parent.$index
celle(fIndex, f)
méthode, $ index sera toujours défini (non omis) - donc l'index devient accessible à la fois comme$index
etfIndex
.$index
ne fonctionne pas, mais l'ajout dufIndex
fait. Je n'ai pas la moindre idée de pourquoi$index
cela ne fonctionne pas (cela fonctionne ailleurs dans mon code), mais après avoir lutté pendant plusieurs jours, j'ai arrêté de me soucier quand j'ai trouvé cette réponse. Il est également un peu plus lisible lorsque vous disposez de plusieursng-repeat
IMO.ng-repeat
itération crée sa propre portée, qui définit également la sienne$index
, écrasant celle du parent$index
. Si vous incluez un{{$index}}
droit au-dessus ou en dessous de l'ng-repeat
élément le plus à l'intérieur , vous verrez la valeur du parent, et le mettre à l'intérieur de l'ng-repeat
élément le plus à l'intérieur vous montrera l'enfant. L'utilisation de l'approche dans cette réponse affecte simplement l'index parent à une variable dont vous avez choisi le nom (fIndex
) afin qu'il ne soit pas remplacé par une portée enfant.Jetez un oeil à ma réponse à une question similaire .
En pseudonyme,
$index
nous n'avons pas à écrire des trucs fous comme$parent.$parent.$index
.Une solution bien plus élégante
$parent.$index
avec ng-init :Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
la source
Vous pouvez également obtenir le contrôle de l'index des grands parents par le code suivant
la source
Vous pouvez simplement utiliser use $ parent. $ Index. Où parent représentera l'objet de l'objet répétitif parent.
la source
$ parent ne fonctionne pas s'il y a plusieurs parents. au lieu de cela, nous pouvons définir une variable d'index parent dans init et l'utiliser
la source