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

MySQL 8.0.21-Installationstutorial unter Windows-System (Abbildung und Text)

Installationsvorschlag : Versuchen Sie, für die I...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.11 Zip

1. Laden Sie das MySQL 5.7.11 Zip-Installationspa...

Warum wird die MySQL-Paging-Funktion bei Verwendung von Limits immer langsamer?

Inhaltsverzeichnis 1. Testexperiment 2. Leistungs...

Implementierung von dynamischem REM für mobiles Layout

Dynamische REM 1. Lassen Sie uns zunächst die akt...

MySQL-Abfrage redundanter Indizes und ungenutzter Indexoperationen

MySQL 5.7 und höhere Versionen ermöglichen die di...

Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL

Das im Titel angesprochene Problem lässt sich sch...

Sechsstufiger Beispielcode für eine JDBC-Verbindung (Verbindung zu MySQL)

Sechs Schritte von JDBC: 1. Registrieren Sie den ...

Detaillierte Erklärung des Marquee-Attributs in HTML

Dieses Tag ist nicht Teil von HTML3.2 und wird nu...

Kurze Analyse von MySQL Union und Union All

In der Datenbank führen sowohl die Schlüsselwörte...

JavaScript verwendet häufig Array-Deduplizierung tatsächliche Kampf Quellcode

Mit der Array-Deduplizierung wird man häufig bei ...

Vue-Anfängerhandbuch: Erstellen des ersten Vue-cli-Scaffolding-Programms

1. Vue – Das erste Vue-CLI-Programm Die Entwicklu...