2
votes

Comment accéder à un élément dans une boucle v-for en utilisant ref

Pour dire les choses aussi simplement que possible:

J'ai une boucle v-for. Je voudrais accéder à un élément spécifique dans l'une des itérations de la boucle. Pour des raisons, je ne peux le faire qu'en utilisant la réf. Y a-t-il un moyen de faire cela?

J'ai essayé différentes méthodes pour y parvenir, mais cela retourne toujours indéfini. Mon code fonctionne bien en dehors d'une boucle v-for.

La documentation de vue ne couvre pas cette instance.

La boucle simplifiée:

 doThing() {
   card = elements.create('card');
   card.mount(this.$refs.card);
 }


0 commentaires

3 Réponses :


0
votes

Les références dans une boucle v-for deviennent des tableaux avec chaque élément à l'index dans lequel il apparaît dans le document. Il est traité ici ~ https://vuejs.org/v2/api/#ref

Lorsqu'elle est utilisée sur des éléments / composants avec v-for , la référence enregistrée sera un tableau contenant des nœuds DOM ou des instances de composant.

Donc pour "accéder à un élément spécifique à l'intérieur d'une des itérations de la boucle" , vous utiliseriez quelque chose comme

card.mount(this.$refs.card[someIndex])

p>


3 commentaires

Malheureusement, il n'est pas garanti que l'ordre dans ce tableau de référence soit dans le même ordre que les éléments du tableau de données. Cela rend les références de tableau assez inutiles :(


@JosephSilber est vrai mais OP n'a pas dit à quel élément spécifique il voulait faire référence. Peut-être est-ce n'importe quel élément?


Merci les gars. J'ai besoin d'accéder à un élément spécifique. Serait-il possible d'obtenir les références en tant qu'objet (en utilisant v-for = "(item, key, index) in items")? Ensuite, utilisez la clé pour obtenir l'élément spécifique?



6
votes

Étant donné que les références de tableau ne sont pas garanties d'être dans l'ordre d'origine, j'ai trouvé plus utile d'enregistrer une référence sur le parent, puis d'utiliser l'API DOM standard pour trouver l'élément souhaité.

Template h3>
{
    methods: {
        getCardAt(index) {
            return this.$refs.cards.children[index];
        }
    }
}

JavaScript

<div ref="cards">
    <div v-for="(item, i) in items">
        <!-- this is a card -->
    </div>
</div>


0 commentaires

2
votes

Vous pouvez essayer ceci:

<div v-for="(item, i) in items">
    <div :ref="`card-${i}`"></div>
</div>


0 commentaires