Ich habe versucht, Komponenten im Inneren zu verwenden v-for Schleife und initieren Sie die ref um in Zukunft auf einige Methoden dieser Eltern zugreifen zu können. Hier ein vereinfachter Code meines Falls:
Es werden nur ein paar Listenelemente gerendert und eines davon nach anderthalb Sekunden hervorgehoben. Aber ich habe einen Fehler: Uncaught TypeError: _this.$refs.item2.highlight is not a function
Nach der Debug-Sitzung habe ich eine interessante Tatsache gefunden: Refs sind im Inneren definiert v-for Schleife sind keine Komponenten, sondern die Arrays mit einer Komponente.
Was ist die Logik, was ist der f-Wrapper? Kennt jemand diesen Fall? Kann jemand dieses Verhalten erklären?
Der oben dargestellte Code funktioniert gut mit setTimeout(() => this.$refs.item2[0].highlight(), 1500);
Muss ich immer passieren [0]? Gibt es einen besseren Weg? Hilfe bitte.
When ref is used together with v-for, the ref you get will be an array containing the child components mirroring the data source. – ist es das?
– raina77ow
29. August 2018 um 21:43 Uhr
Wenn Sie Refs mit v-for verwenden, werden die Komponenten-/DOM-Knoten als Array direkt im Variablennamen gespeichert, sodass Sie keine Indexnummer im Ref-Namen verwenden müssen. Sie können also Folgendes tun:
<list-item
v-for="item in items"
:key="item.id"
:value="item.text"
ref="items"
/>
Und verwenden Sie die Refs in Ihrer Komponente wie folgt:
this.$refs.items[index]
Beachten Sie auch, dass die Refs möglicherweise nicht in Ordnung sind und auf andere Weise gehandhabt werden müssten, was ein völlig anderes Problem darstellt. Das kannst du hier verfolgen: https://github.com/vuejs/vue/issues/4952
In der Tat brauchen Sie keinen Index in v-for Schleife für ref.
– Alexander Kim
29. Juli 2019 um 18:37 Uhr
Wie verwende ich das mit der Kompositions-API?
– ausbessern3
23. Februar 2021 um 10:02 Uhr
Beachten Sie, dass dies in Vue 3 nicht funktioniert
– Roll
22. Oktober 2021 um 12:24 Uhr
Was wäre, wenn Sie mehrere Elemente innerhalb des v-for hätten, einschließlich einer Eingabe? und Sie möchten die Eingabe fokussieren. Wie würden Sie auf die spezifische Eingabe innerhalb dieser Ref-Lösung zugreifen?
– Ihr IVDLO
5. November 2021 um 14:14 Uhr
Bearbeiten Ich habe herausgefunden, wie Sie .children hinzufügen können[index] bis zum Ende, um durch die Elemente innerhalb des v-for zu navigieren
– Ihr IVDLO
5. November 2021 um 14:35 Uhr
Syd
Für Vue 3-Benutzer:
In Vue 3 wird bei einer solchen Verwendung nicht mehr automatisch ein Array in erstellt $refs. Um mehrere Verweise aus einer einzelnen Bindung abzurufen, binden Sie ref zu einer Funktion, die mehr Flexibilität bietet (dies ist ein neues Feature):
HTML
<div v-for="item in list" :ref="setItemRef"></div>
Bitte fügen Sie eine Zeile hinzu, wie die Referenz verwendet werden soll, sagen Sie zum Beispiel, sich auf ein Element zu konzentrieren und auf seine Referenz zu verweisen
– Joel G Mathew
28. September 2021 um 19:31 Uhr
@JoelGMathew Es ist eine sehr spezifische Anfrage, wenn Sie Hilfe benötigen, pingen Sie mich bitte über Skype an: syed_haroon
Wie sobolevon erwähnt, der Rückgabewert von $refs.{ref name} ist ein Array in v-for refs, also ist meine Lösung zu berücksichtigen $refs.{ref name} ist ein Array mit nur einem Element standardmäßig und schreiben $refs.{ref name}[0].methodToCall().
Und es funktioniert für meinen Fall.
Vissi
Für alle, die Vue 3 mit Typescript und diesem (vuejs/core#5525) Problem noch offen. Basierend auf den anderen Antworten können Sie Folgendes tun:
Aktualisieren:vuejs/core#5525 scheint behoben zu sein, daher ist eine andere Lösung möglicherweise besser.
<div
v-for="item in items"
:ref="addRef"
...
</div>
...
function addRef(el: unknown) {
if (el instanceof Element) {
participantRefs.value.push(el);
}
}
Ich habe dieses Problem beobachtet und es sieht so aus, als ob es kürzlich behoben wurde 👍🏼
– Kaleb Waldner
28. Mai um 20:34 Uhr
Yitz
Ich habe das Bestellproblem gelöst, indem ich eine dynamische Referenz verwendet habe: :ref="'myRef' + index".
Wenn Sie dies tun, erstellt Vue für jedes Element im v-for ein neues Array, dessen einziges Element immer die gewünschte Referenz ist. Sie können dann mit darauf zugreifen this.$refs['myRef' + index][0].
(Dies funktioniert nicht in Vue 3.)
Ich habe dieses Problem beobachtet und es sieht so aus, als ob es kürzlich behoben wurde 👍🏼
When ref is used together with v-for, the ref you get will be an array containing the child components mirroring the data source.
– ist es das?– raina77ow
29. August 2018 um 21:43 Uhr