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

So deklarieren Sie einen Cursor in MySQL

So deklarieren Sie einen Cursor in MySQL: 1. Vari...

So führen Sie Hadoop aus und erstellen Images in Docker

Wir erfinden das Rad neu: Hier verwenden wir Neuv...

Detailliertes Tutorial zur automatischen Installation von CentOS7.6 mit PXE

1. Nachfrage Die Basis verfügt über 300 neue Serv...

Schritte eines hervorragenden Registrierungsprozesses

Für eine Website ist dies die grundlegendste Funkt...

So verwenden Sie mysqldump für vollständige und zeitpunktbezogene Sicherungen

Mysqldump wird für logische Backups in MySQL verw...

Sprechen Sie über wichtige Unterverzeichnisprobleme im Linux-System

/etc/fstab Partitionen/Festplatten automatisch mo...

Vue realisiert den Prozentbalkeneffekt

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

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

So legen Sie den Fokus auf HTML-Elemente fest

Code kopieren Der Code lautet wie folgt: <Körp...

CSS -webkit-box-orient: vertikale Eigenschaft nach der Kompilierung verloren

1. Ursache Die Anforderung besteht darin, zwei Ze...

Beispielcode zur Implementierung eines reinen CSS-Popup-Menüs mit Transform

Vorwort Wenn Sie ein Topmenü erstellen, müssen Si...

Spezifische Verwendung von Vues neuem Spielzeug VueUse

Inhaltsverzeichnis Vorwort Was ist VueUse Einfach...

So installieren Sie MySQL 5.7.29 mit einem Klick mithilfe eines Shell-Skripts

Dieser Artikel bezieht sich auf die Arbeit des 51...

So invertieren Sie die Implementierung einer Bézierkurve in CSS

Schauen wir uns zunächst einen CSS-Karussell-Anim...