Vue-Kapselungskomponententool $attrs, $listeners-Verwendung

Vue-Kapselungskomponententool $attrs, $listeners-Verwendung

Vorwort

Wenn für die Verschachtelung mehrstufiger Komponenten eine Datenübertragung erforderlich ist, wird üblicherweise die Methode über vuex verwendet. Aber einfach Daten ohne Zwischenverarbeitung weiterzugeben und für die Verarbeitung Vuex zu verwenden, ist etwas übertrieben. Es gibt also zwei Attribute, $attrs und $listeners, die normalerweise zusammen mit inheritAttrs verwendet werden.

$attrs

Die von der übergeordneten Komponente an die benutzerdefinierte untergeordnete Komponente übergebenen Eigenschaften werden automatisch auf das äußerste Tag innerhalb der untergeordneten Komponente gesetzt, wenn kein Prop-Empfänger vorhanden ist. Wenn es sich um eine Klasse und einen Stil handelt, werden die Klasse und der Stil des äußersten Tags zusammengeführt.

Wenn die untergeordnete Komponente die von der übergeordneten Komponente übergebenen Nicht-Prop-Attribute nicht erben möchte, können Sie die Vererbung mit inheritAttrs deaktivieren und dann die übergebenen externen Nicht-Prop-Attribute über v-bind="$attrs" an das gewünschte Tag setzen. Dadurch werden jedoch weder Klasse noch Stil geändert.

Offizieller Website-Link zum inheritAttrs-Attribut

2.4.0 Neu

Typ: Boolescher Wert

Standardwert: true

ausführlich:

Standardmäßig wird für Attributbindungen mit übergeordnetem Gültigkeitsbereich, die nicht als Eigenschaften erkannt werden, ein „Fallback“ ausgeführt und sie werden als normale HTML-Attribute auf das Stammelement der untergeordneten Komponente angewendet. Beim Schreiben von Komponenten, die ein Zielelement oder eine andere Komponente umschließen, ist dies möglicherweise nicht immer das erwartete Verhalten. Indem Sie inheritAttrs auf „false“ setzen, wird dieses Standardverhalten entfernt. Diese Attribute können durch die Instanzeigenschaft $attrs (ebenfalls neu in 2.4) wirksam gemacht werden und können durch v-bind explizit an Nicht-Root-Elemente gebunden werden.

Hinweis: Diese Option wirkt sich nicht auf Klassen- und Stilbindungen aus.

Beispiel:

Übergeordnete Komponente

<Vorlage>
  <meine-Eingabe
      erforderlich
      Platzhalter="Bitte Inhalt eingeben"
      Typ="Text"
      Klasse = "Theme-Dunkel"
  />
</Vorlage>

<Skript>
importiere MyInput aus './child'
Standard exportieren {
  Name: "Elternteil",
  Komponenten:
    MeineEingabe
  }
}
</Skript>

Unterkomponenten

<Vorlage>
  <div>
    <Eingabe
        v-bind="$attrs"
        Klasse="Formular-Steuerelement"
    />
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: 'MyInput',
  inheritAttrs: false
}
</Skript>

Die untergeordnete Komponente akzeptiert den von der übergeordneten Komponente übergebenen Wert nicht und bindet ihn auch nicht. Mit dem Attribut v-bind="$attrs" akzeptiert und bindet sie ihn jedoch automatisch.

inheritAttrs: false

inheritAttrs: true

$listeners (offizielle Erklärung)

Listener: Enthält v-on-Ereignislistener im übergeordneten Bereich (ohne den Modifikator .native). Es kann über v-on="$listeners" an innere Komponenten übergeben werden – sehr nützlich beim Erstellen von Komponenten auf höherer Ebene.

Schauen wir uns zunächst den Code an: Hier nehmen wir nur die Fokus- und Eingabeereignisse als Beispiele.

// Übergeordnete Komponente <template>
  <meine-Eingabe
      erforderlich
      Platzhalter
      Klasse = "Theme-Dunkel"
      @focue="imFokus"
      @input="beiEingabe"
  >
  </meine-Eingabe>
</Vorlage>
<Skript>
importiere MyInput aus './child'
Standard exportieren {
  Komponenten:
    MeineEingabe
  },
  Methoden: {
    bei Fokus (e) {
      Konsole.log(e.Ziel.Wert)
    },
    beiEingabe (e) {
      Konsole.log(e.Ziel.Wert)
    }
  }
}
</Skript>
// Unterkomponente <template>
  <div>
    <Eingabe
        Typ="Text"
        v-bind="$attrs"
        Klasse="Formular-Steuerelement"
        @focus="$emit('Fokus', $Ereignis)"
        @input="$emit('Eingabe', $Ereignis)"
    />
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: 'MyInput',
  inheritAttrs: false
}
</Skript>

Das Binden nativer Ereignisse auf diese Weise ist sehr mühsam. Jedes native Ereignis muss gebunden werden, aber die Verwendung von v-on="$listeners" erspart viel Ärger.

 <Eingabe
        Typ="Text"
        v-bind="$attrs"
        Klasse="Formular-Steuerelement"
+ v-on="$listeners"
- @focus="$emit('Fokus', $Ereignis)"
- @input="$emit('Eingabe', $Ereignis)"
    />

Diese eine Codezeile kann das Problem der Bindung aller nativen Ereignisse lösen

Anwendungsszenarien

Wird verwendet, wenn Komponenten Werte übergeben: Der Großvater übergibt Werte an die Vaterkomponente, und die Vaterkomponente erhält alle Attribute, die nicht in den Eigenschaften des Vaters enthalten sind, über $attrs. Die Vaterkomponente bindet $attrs und $listeners an die Enkelkomponente, sodass die Enkelkomponente den vom Großvater übergebenen Wert abrufen und die im Großvater definierte Methode aufrufen kann.

Wird für die Sekundärverpackung einiger UI-Bibliotheken verwendet: Wenn beispielsweise die Komponenten in Element-UI Ihren eigenen Nutzungsszenarien nicht gerecht werden können, werden sie sekundär verpackt, Sie möchten jedoch ihre eigenen Eigenschaften und Methoden beibehalten. Derzeit sind $attrs und $listners eine perfekte Lösung.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Verwendung von $attrs und $listeners, einem leistungsstarken Tool für Vue-Kapselungskomponenten. Weitere Informationen zur Verwendung von $attrs und $listeners von Vue-Kapselungskomponenten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Lassen Sie uns kurz über $attrs und $listeners von vue2.x sprechen
  • Die Verwendung und der Unterschied von vue $attrs und $listeners
  • Detaillierte Erklärung zur Verwendung von $props, $attrs und $listeners in Vue
  • Tutorial zur Verwendung von $attrs und $listeners in Vue
  • Vue $attrs & inheritAttr, um den Effekt „Schaltfläche deaktiviert“ zu erreichen
  • Analyse des Implementierungsprinzips von $attrs und $listeners in der Vue-Komponentenkommunikation
  • Eine umfassende Analyse der Verwendung von vue $attrs

<<:  Beispielcode zur Implementierung von Neon-Button-Animationseffekten mit CSS3.0

>>:  7 Hauptelemente der Neugestaltung von Webseiten Teilen Sie die 7 Hauptelemente der Neugestaltung von Webseiten

Artikel empfehlen

Analysieren der Knotenereignisschleife und der Nachrichtenwarteschlange

Inhaltsverzeichnis Was ist asynchron? Warum brauc...

20 JS-Abkürzungsfähigkeiten zur Verbesserung der Arbeitseffizienz

Inhaltsverzeichnis Wenn Sie mehrere Variablen gle...

Das vergessene Button-Tag

Hinweis: Dieser Artikel wurde von jemand anderem ü...

Eine kurze Diskussion über zwei Strombegrenzungsmethoden in Nginx

Die Belastung wird im Allgemeinen während des Sys...

Detaillierte Erläuterung der logischen Architektur von MySQL

1. Gesamtarchitekturdiagramm Im Vergleich zu ande...

Tutorial zur Installation und Konfiguration von VMware Tools für Ubuntu

Vor einiger Zeit hat der Blogger das Ubuntu-Syste...

Interpretation und Verwendung verschiedener React-State-Manager

Zunächst müssen wir wissen, was ein Zustandsmanag...

Sie müssen wahrscheinlich keine Switch-Anweisungen in JavaScript verwenden

Inhaltsverzeichnis Kein Schalter, keine komplexen...

Verwenden von jQuery zum Implementieren des Karusselleffekts

Was ich Ihnen heute zeige, ist die Verwendung von...

Kleine Details der Web-Frontend-Entwicklung

1 Das Select-Tag muss geschlossen sein <select&...