Hinweise zur Verwendung von $refs in Vue-Instanzen

Hinweise zur Verwendung von $refs in Vue-Instanzen

Während des Entwicklungsprozesses verwenden wir häufig vm.$refs(this.$refs) der Instanz, um über ref registrierte Komponenten abzurufen und entsprechende Vorgänge auszuführen. Es gibt jedoch Fälle, in denen Elemente nicht abgerufen werden können. Die Hauptursache ist, dass $refs Elemente erst abrufen können, nachdem sie gemountet (gerendert) wurden.

Beispielsweise ist es in diesem Fall normal, dass kein Knoten abgerufen werden kann, wenn das Flag von einem wahren Wert auf einen falschen Wert wechselt, denn wenn v-if ein falscher Wert ist, wird der Knoten nicht gerendert.

Wenn Sie jedoch von einem falschen Wert zu einem wahren Wert wechseln, können Sie den Knoten möglicherweise nicht abrufen. Dies liegt daran, dass das Rendern Zeit in Anspruch nimmt, was normalerweise mit $nextTick() gelöst werden kann.

...
<el-table v-if="flag" ref="table">
  <el-table-column prop="prop1"></el-table-column>
  <el-table-column prop="prop2"></el-table-column>
</el-Tabelle>
...
 
 
Standard exportieren {
  Methoden: {
    dies.$refs.table.XXX()
  }
}

Es gibt jedoch einen ganz besonderen Fall. Wenn die Seite zum ersten Mal gerendert wird, kann $refs keinen Wert abrufen. Zu diesem Zeitpunkt müssen wir v-show in Betracht ziehen, um Komponentenelemente auszublenden und anzuzeigen.

Da v-show durch CSS display:none ausgeblendet ist, wird es am Anfang gerendert und das Element wird auf jeden Fall abgerufen.

Ergänzung: Beispiele und Tipps zur Verwendung von ref ($refs) in Vue.js

1. Verwendung zusammengefasst nach amtlichen Dokumenten:

Im Abschnitt „Ref“ der Vue.js-Dokumentation habe ich die Verwendung von „Ref“ zur späteren Bezugnahme zusammengefasst.

1. ref wird auf externen Komponenten verwendet

HTML-Teil

<div id="ref-outside-component" v-on:click="consoleRef">
  <component-father ref="outsideComponentRef">
  </Komponentenvater>
  <p>ref befindet sich auf der äußeren Komponente</p>
</div>

js-Teil

var refoutsidecomponentTem = {
    Vorlage: „<div class='childComp'><h5>Ich bin eine untergeordnete Komponente</h5></div>“
  };
  var refoutsidecomponent = neuer Vue({
    el:"#ref-Außenkomponente",
    Komponenten: {
      "Komponenten-Vater":refoutsidecomponentTem
    },
    Methoden:{
      consoleRef:Funktion () {
        console.log(diese); // #ref-outside-component Vue-Instanz console.log(diese.$refs.outsideComponentRef); // div.childComp Vue-Instanz }
    }
  });

2. Ref wird auf externen Elementen verwendet

HTML-Teil

<!--ref befindet sich auf dem äußeren Element-->
<div id="ref-outside-dom" v-on:click="consoleRef" >
  <Komponenten-Vater>
  </Komponentenvater>
  <p ref="outsideDomRef">ref befindet sich auf dem äußeren Element</p>
</div>

JS-Teil

var refoutsidedomTem = {
    Vorlage: „<div class='childComp'><h5>Ich bin eine untergeordnete Komponente</h5></div>“
  };
  var refoutsidedom = neuer Vue({
    el:"#ref-outside-dom",
    Komponenten: {
      "Komponentenvater":refoutsidedomTem
    },
    Methoden:{
      consoleRef:Funktion () {
        console.log(this); // #ref-outside-dom vue Beispiel console.log(this.$refs.outsideDomRef); // <p> ref ist auf dem äußeren Element</p>
      }
    }
  });

3. Ref wird auf die Elemente innerhalb der lokalen Registrierungskomponente angewendet

HTML-Teil

<!--Ref auf das Element darin-->
<div id="ref-inside-dom">
  <Komponenten-Vater>
  </Komponentenvater>
  <p>ref ist auf dem Element im Inneren</p>
</div>

JS-Teil

  var refinsidedomTem = {
    Vorlage:"<div Klasse='childComp' v-on:click='consoleRef'>" +
            "<h5 ref='insideDomRef'>Ich bin eine untergeordnete Komponente</h5>" +
         "</div>",
    Methoden:{
      consoleRef:Funktion () {
        console.log(diese); // div.childComp vue-Instanz console.log(diese.$refs.insideDomRef); // <h5 >Ich bin eine untergeordnete Komponente</h5>
      }
    }
  };
  var refinsidedom = neuer Vue({
    el:"#ref-inside-dom",
    Komponenten: {
      "Komponentenvater":refinsidedomTem
    }
  });

4. Ref wird auf die Elemente innerhalb der globalen Registrierungskomponente angewendet

HTML-Teil

<!--Ref auf das Element innerhalb --Globale Registrierung-->
<div id="ref-inside-dom-all">
  <ref-innen-dom-quanjv></ref-innen-dom-quanjv>
</div>

JS-Teil

  Vue.component("ref-inside-dom-quanjv",{
    Vorlage:"<div Klasse='insideFather'> " +
          "<Eingabetyp='Text' ref='insideDomRefAll' v-on:input='showinsideDomRef'>" +
          " <p>Ref auf das Element im Inneren - global registriert</p> " +
         "</div>",
    Methoden:{
      showinsideDomRef:Funktion () {
        console.log(dies); //Dies ist eigentlich div.insideFather
        konsole.log(diese.$refs.insideDomRefAll); // <Eingabetyp="text">
      }
    }
  });
  var refinsidedomall = neuer Vue({
    el:"#ref-inside-dom-all"
  });

2. Fallstricke, auf die Sie achten sollten

1. Wenn Sie durch v-for-Traversierung verschiedene Referenzen hinzufügen möchten, denken Sie daran, das Zeichen : hinzuzufügen, d. h. :ref = eine Variable;

Dies ist dasselbe wie bei anderen Attributen. Wenn es sich um einen festen Wert handelt, müssen Sie kein :-Zeichen hinzufügen. Wenn es sich um eine Variable handelt, denken Sie daran, ein :-Zeichen hinzuzufügen.

2. Fügen Sie ref durch :ref = eine Variable hinzu (das heißt, fügen Sie :) hinzu). Wenn Sie den Ref erhalten möchten, müssen Sie [0] hinzufügen, wie dies.$refs[refsArrayItem] [0]. Wenn es nicht :ref = eine Variable, sondern ref = ein String ist, müssen Sie es nicht hinzufügen, wie dies.$refs[refsArrayItem]

Der Unterschied zwischen Hinzufügen und Nicht-Hinzufügen [0] - nicht erweitert

Der Unterschied zwischen Hinzufügen und Nicht-Hinzufügen [0] - Erweitert

3. Wenn Sie das DOM abrufen möchten, nachdem das Dialogfeld „Element-UI“ geöffnet wurde, sollten Sie $nextTick verwenden, anstatt direkt this.$refs.imgLocal2 zu verwenden:

    console.log('außerhalb von this.$refs.imgLocal2', this.$refs.imgLocal2);
    setzeTimeout(() => {
     console.log('this.$refs.imgLocal2 setTimeout', this.$refs.imgLocal2);
    }, 500); // Nicht empfohlen this.$nextTick(() => {
     console.log('diese.$refs.imgLocal2 $nextTick', dies.$refs.imgLocal2);
    });

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Die übergeordnete Vue-Komponente erhält den Wert und die Methode der untergeordneten Komponente über $refs
  • Vue verwendet grundsätzlich --refs, um Instanzen von Komponenten oder Elementen abzurufen
  • Vue löst das Problem von DOM- oder Komponentenfehlern dadurch.$refs
  • Vue verwendet Refs, um den Wertprozess in verschachtelten Komponenten abzurufen

<<:  Beispiel zum Festlegen der pseudostatischen WordPress-Eigenschaft in Nginx

>>:  Was sind die neuen Funktionen von Apache Spark 2.4, das 2018 veröffentlicht wird?

Artikel empfehlen

Ursachen und Lösungen für den MySQL-Fehler „zu viele Verbindungen“

Inhaltsverzeichnis Kurzzusammenfassung Heute Mitt...

MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Inhaltsverzeichnis Vorwort Einrichten der Protoko...

Lösung für den Konfigurationsfehler des Nginx-SSL-Zertifikats

1. Einleitung Wenn ein Webprojekt auf unserem Lin...

Zusammenfassung einiger Gedanken zur Binlog-Optimierung in MySQL

Frage Frage 1: Wie kann der Leistungsverlust beho...

503 Dienst nicht verfügbar Fehlerlösungserklärung

1. Beim Öffnen der Webseite wird die Meldung „503...

Erläuterung des MySQL-Abfragebeispiels anhand instanziierter Objektparameter

Dieser Artikel stellt vor, wie Sie durch Instanzi...

Bootstrap realisiert den Karusselleffekt

In diesem Artikel wird der spezifische Code von B...

Detaillierte Schritte zur Installation von RabbitMQ im Docker

Inhaltsverzeichnis 1. Finde den Spiegel 2. Laden ...