Eu quero usar o índice da lista pai (foos) como argumento para uma chamada de função na lista filho (foos.bars).
Encontrei um post em que alguém recomenda o uso de $ parent. $ Index, mas $index
não é propriedade de $parent
.
Como posso acessar o índice dos pais 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>
Respostas:
Meu código de exemplo estava correto e o problema era outra coisa no meu código real. Ainda assim, eu sei que foi difícil encontrar exemplos disso, então estou respondendo caso alguém esteja procurando.
fonte
ng-if
no código, como acabei de descobrir.ng-if
requer uma$parent
referência adicional . Me salvou um pouco de dor de cabeça.De acordo com os documentos ng-repeat , http://docs.angularjs.org/api/ng.directive:ngRepeat , você pode armazenar o índice de chave ou matriz na variável de sua escolha.
(indexVar, valueVar) in values
então você pode escrever
Um nível acima ainda é bastante limpo com o índice $ parent. $, Mas com vários pais, as coisas podem ficar confusas.
Nota:
$index
continuará sendo definido em cada escopo, não será substituído porfIndex
.fonte
$parent.$index
um(fIndex, f)
método, $ index ainda será definido (não omitido) - para que o índice se torne acessível como ambos$index
efIndex
.$index
não funciona, mas adicionar ofIndex
faz. Eu não tenho uma única pista do porquê$index
não funciona (em outros lugares do meu código), mas depois de lutar por vários dias, parei de me importar quando encontrei essa resposta. Também é um pouco mais legível quando você tem váriosng-repeat
s IMO.ng-repeat
iteração cria seu próprio escopo, que também define o seu próprio$index
, substituindo o pai$index
. Se você incluir um elemento{{$index}}
logo acima ou abaixo dong-repeat
elemento mais interno , verá o valor do pai e colocá-lo dentro dong-repeat
elemento mais interno mostrará a criança. O uso da abordagem nesta resposta apenas atribui o índice pai a uma variável cujo nome você escolheu (fIndex
), para que não seja sobrescrito por um escopo filho.Dê uma olhada na minha resposta para uma pergunta semelhante .
Ao usar o alias
$index
, não precisamos escrever coisas malucas como$parent.$parent.$index
.Solução mais elegante do que
$parent.$index
usar o ng-init :Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
fonte
Você também pode obter o controle do índice dos principais pais pelo seguinte código
fonte
Você pode simplesmente usar o uso de $ parent. $ Index .where parent representará o objeto pai que repete o objeto.
fonte
$ parent não funciona se houver vários pais. em vez disso, podemos definir uma variável de índice pai no init e usá-la
fonte