12 Arten der Komponentenkommunikation in Vue2

12 Arten der Komponentenkommunikation in Vue2

Im Folgenden werden die Schreibmethoden der einzelnen Komponentenkommunikationsmethoden einzeln aufgelistet.

1. Requisiten

Die übergeordnete Komponente überträgt Daten an die untergeordnete Komponente. Dies sollte die am häufigsten verwendete Methode sein. Nachdem die untergeordnete Komponente die Daten empfangen hat, kann sie die Daten der übergeordneten Komponente nicht direkt ändern . meldet einen Fehler, sodass die Daten beim erneuten Rendern der übergeordneten Komponente überschrieben werden. Wenn Sie die Unterkomponente ändern möchten, empfiehlt es sich, computed

// Parent.vue überträgt <template>
    <child :msg="msg"></child>
</Vorlage>

// Child.vue empfängt Export-Standard {
  //Schreibmethode 1: Verwenden Sie ein Array, um Props zu empfangen: ['msg'],
  // Schreibmethode 2: Verwenden Sie zum Empfangen ein Objekt. Sie können den empfangenen Datentyp begrenzen, einen Standardwert festlegen, überprüfen usw. props:{
      Nachricht:{
          Typ: Zeichenfolge,
          Standard: „Dies sind die Standarddaten“
      }
  },
  montiert(){
      console.log(diese.msg)
  },
}

2. .synchronisieren

Es kann uns helfen, die bidirektionale Bindung von Daten zu realisieren, die von der übergeordneten Komponente an die untergeordnete Komponente übergeben werden, sodass die untergeordnete Komponente die Daten direkt nach dem Empfang ändern kann und gleichzeitig auch die Daten der übergeordneten Komponente ändert.

// Übergeordnetes Element.vue
<Vorlage>
    <child :page.sync="Seite"></child>
</Vorlage>
<Skript>
Standard exportieren {
    Daten(){
        zurückkehren {
            Seite:1
        }
    }
}

// Kind.vue
Standard exportieren {
    Requisiten: ["Seite"],
    berechnet(){
        // Wenn wir currentPage in der untergeordneten Komponente ändern, ändert sich auch die Seite der übergeordneten Komponente currentPage {
            erhalten(){
                diese Seite zurückgeben
            },
            setze(neuerWert){
                dies.$emit("update:page", neuerWert)
            }
        }
    }
}
</Skript>

3. V-Modell

Ähnlich wie .sync kann es eine bidirektionale Bindung von Daten von der übergeordneten Komponente an die untergeordnete Komponente realisieren, und die untergeordnete Komponente kann die Daten der übergeordneten Komponente über $emit ändern.

// Übergeordnetes Element.vue
<Vorlage>
    <child v-model="Wert"></child>
</Vorlage>
<Skript>
Standard exportieren {
    Daten(){
        zurückkehren {
            Wert: 1
        }
    }
}

// Kind.vue
<Vorlage>
    <input :value="Wert" @input="handlerChange">
</Vorlage>
Standard exportieren {
    Requisiten: ["Wert"],
    // Sie können den Ereignisnamen ändern. Der Standardwert ist „input“.
    Modell:{
        Ereignis: „Aktualisierungswert“
    },
    Methoden:{
        handlerChange(e){
            dies.$emit("Eingabe", e.Ziel.Wert)
            // Wenn oben eine Umbenennung steht, sieht diese so aus: $emit("updateValue", e.target.value)
        }
    }
}
</Skript>

4. Referenz

Wenn sich ref auf einem normalen DOM Element befindet, zeigt die Referenz auf dieses DOM-Element.
Wenn sich der Verweis auf die Instanz der untergeordneten Komponente bezieht, kann die übergeordnete Komponente die Eigenschaften der untergeordneten Komponente aktiv abrufen oder die Methoden der untergeordneten Komponente über ref aufrufen.

// Kind.vue
Standard exportieren {
    Daten(){
        zurückkehren {
            Name:"Muhua"
        }
    },
    Methoden:{
        irgendeineMethode(Nachricht){
            Konsole.log(Nachricht)
        }
    }
}

// Übergeordnetes Element.vue
<Vorlage>
    <Kind ref="Kind"></Kind>
</Vorlage>
<Skript>
Standard exportieren {
    montiert(){
        const Kind = dies.$refs.child
        console.log(child.name) // Muhuachild.someMethod("Die Methode der untergeordneten Komponente wird aufgerufen")
    }
}
</Skript>

5. $emit / v-on

Untergeordnete Komponenten senden Daten an übergeordnete Komponenten, indem sie Ereignisse versenden oder Aktualisierungen und andere Vorgänge an übergeordneten Komponenten auslösen.

// Child.vue Versand Export Standard {
  Daten(){
      return { msg: "Dies ist die Nachricht, die an die übergeordnete Komponente gesendet wurde" }
  },
  Methoden: {
      handleClick(){
          dies.$emit("sendMsg",diese.msg)
      }
  },
}
// Parent.vue antwortet auf <template>
    <child v-on:sendMsg="getChildMsg"></child>
    // oder abgekürzt <child @sendMsg="getChildMsg"></child>
</Vorlage>

Standard exportieren {
    Methoden:{
        getChildMsg(msg){
            console.log(msg) // Dies ist die von der übergeordneten Komponente empfangene Nachricht}
    }
}

6. $attrs / $listeners

Dies kann verwendet werden, wenn mehrere Ebenen verschachtelter Komponenten Daten weitergeben, und Sie möchten die Daten nur weitergeben, ohne eine Zwischenverarbeitung durchzuführen, z. B. wenn eine übergeordnete Komponente Daten an eine untergeordnete Komponente weitergibt.
$attrs: Enthält eine Sammlung von Nicht props -Attributen im übergeordneten Bereich außer class und style . Holen Sie sich alle qualifizierten Attributsätze im übergeordneten Bereich über this.$attrs und übergeben Sie sie dann über v-bind="$attrs" an andere Komponenten in der untergeordneten Komponente.

$listeners: Enthält eine Sammlung von Listener-Ereignissen im übergeordneten Bereich außer native . Wenn Sie es weiterhin an andere Komponenten innerhalb der untergeordneten Komponente weitergeben möchten, können Sie v- on="$linteners" verwenden.

Die Nutzung ist die gleiche

// Übergeordnetes Element.vue
<Vorlage>
    <child :name="name" title="1111" ></child>
</Vorlage
Standard exportieren{
    Daten(){
        zurückkehren {
            Name:"Muhua"
        }
    }
}

// Kind.vue
<Vorlage>
    // Mit der Übergabe an die untergeordnete Komponente fortfahren <sun-child v-bind="$attrs"></sun-child>
</Vorlage>
Standard exportieren{
    props:["name"], // Dies kann empfangen oder nicht empfangen werden mounted(){
        // Wenn die Requisiten einen Namen erhalten, ist es { title:1111 }, andernfalls ist es { name:"Muhua", title:1111 }
        konsole.log(dies.$attrs)
    }
}

7. $Kinder / $Eltern

$children: Holen Sie sich ein Array von VueComponent -Objekten, das alle untergeordneten Komponenten enthält (ausgenommen Enkelkomponenten), und Sie können alle Daten und Methoden in den untergeordneten Komponenten direkt abrufen.
$parent: Ruft ein VueComponent Objekt eines übergeordneten Knotens ab, das auch alle Daten und Methoden im übergeordneten Knoten enthält.

// Übergeordnetes Element.vue
Standard exportieren{
    montiert(){
        this.$children[0].someMethod() // Ruft die Methode der ersten untergeordneten Komponente auf this.$children[0].name // Ruft die Eigenschaften der ersten untergeordneten Komponente ab }
}

// Kind.vue
Standard exportieren{
    montiert(){
        this.$parent.someMethod() //Rufen Sie die Methode der übergeordneten Komponente auf this.$parent.name //Holen Sie sich die Eigenschaften in der übergeordneten Komponente}
}

8. bereitstellen / injizieren

provide / inject ist eine Abhängigkeitsinjektion. Es wird nicht empfohlen, es direkt im Anwendungscode zu verwenden, es wird jedoch häufig in einigen Plug-Ins oder Komponentenbibliotheken verwendet, daher denke ich, dass es in Ordnung ist, es zu verwenden. Es ist ziemlich nützlich.

Bereitstellen: ermöglicht es uns, die Daten oder Methoden anzugeben, die wir den untergeordneten Komponenten bereitstellen möchten
Einfügen: Empfangen Sie die Daten oder Methoden, die Sie dieser Komponente hinzufügen möchten, in jeder untergeordneten Komponente. Unabhängig davon, wie tief die Komponente verschachtelt ist, können Sie sie direkt verwenden

Es ist zu beachten, dass die von provide und inject übergebenen Daten nicht reagieren, d. h., wenn sich nach dem Empfangen von Daten mit inject die Daten in provide ändern, ändern sich die Daten in den untergeordneten Komponenten nicht, es sei denn, das übergebene Objekt ist ein abhörbares Objekt. Daher wird empfohlen, einige Konstanten oder Methoden zu übergeben.

// Übergeordnete Komponente exportiert standardmäßig{
    // Methode 1 kann die Methode in den bereitgestellten Methoden nicht abrufen: {
        Name:"Muhua",
        Alter: Eigenschaft in this.data},
    // Methode 2 kann die Attribute in den Daten nicht abrufen provide(){
        zurückkehren {
            Name:"Muhua",
            someMethod:this.someMethod // Methode in Methoden }
    },
    Methoden:{
        irgendeineMethode(){
            console.log("Dies ist die Injektionsmethode")
        }
    }
}

// Abkömmling Komponente export default{
    injizieren:["Name","irgendeineMethode"],
    montiert(){
        console.log(dieser.Name)
        dies.someMethod()
    }
}

9. EventBus

EventBus ist der zentrale Ereignisbus. Unabhängig davon, ob es sich um eine übergeordnete/untergeordnete Komponente, eine Geschwisterkomponente oder eine ebenenübergreifende Komponente handelt, kann er zum Abschließen von Kommunikationsvorgängen verwendet werden. Es gibt drei Möglichkeiten, ihn zu definieren.

/Methode 1:

// Extrahieren Sie es in eine separate js-Datei Bus.js und importieren Sie es dann bei Bedarf // Bus.js
Vue von „vue“ importieren
exportiere standardmäßig neues Vue()

Methode 2: Direktes Mounten auf dem globalen

// Haupt.js
Vue von „vue“ importieren
Vue.prototype.$bus = neues Vue()

Methode 3: In das Vue-Stammobjekt einfügen

// Haupt.js
Vue von „vue“ importieren
neuer Vue({
    el:"#app",
    Daten:{
        Bus: neues Vue()
    }
})

Die Verwendung ist wie folgt, wobei Methode 1 als Beispiel zur Einführung bei Bedarf verwendet wird

// In der Komponente, die benutzerdefinierte Ereignisse nach außen senden muss <template>
    <button @click="handlerClick">Schaltfläche</button>
</Vorlage>
Bus aus "./Bus.js" importieren
Standard exportieren{
    Methoden:{
        handlerKlick(){
            // Benutzerdefinierter Ereignisname sendMsg
            Bus.$emit("sendMsg", "Dies sind die nach außen zu sendenden Daten")
        }
    }
}

// Importieren Sie den Bus aus „./Bus.js“ in die Komponente, die externe Ereignisse empfangen muss
Standard exportieren{
    montiert(){
        // Auf Ereignisauslöser warten Bus.$on("sendMsg", data => {
            console.log("Dies sind die empfangenen Daten:", Daten)
        })
    },
    vorZerstören(){
        //Überwachung abbrechen Bus.$off("sendMsg")
    }
}

10. Vuex

Vuex ist ein State-Manager, der den Zustand aller Komponenten zentral speichert und verwaltet. Dieser Abschnitt ist zu lang. Wenn Sie mit den Grundlagen nicht vertraut sind, können Sie sich diesen Vuex ansehen. Die allgemeine Verwendung ist wie folgt

Erstellen Sie beispielsweise eine Dateistruktur wie diese

Der Inhalt von index.js ist wie folgt:

Vue von „vue“ importieren
Vuex von „vuex“ importieren
Getter aus „./getters“ importieren
Aktionen aus „./actions“ importieren
Mutationen aus „./mutations“ importieren
Status aus „./state“ importieren
Benutzer aus „./modules/user“ importieren

Vue.Verwenden(Vuex)

const store = neuer Vuex.Store({
  Module:
    Benutzer
  },
  Getter,
  Aktionen,
  Mutationen,
  Zustand
})
Standardspeicher exportieren

Importieren Sie es dann in main.js:

Vue von „vue“ importieren
Store aus "./store" importieren
neuer Vue({
    el:"#app",
    speichern,
    rendern: h => h(App)
})

Dann in der erforderlichen Komponente:

importiere { mapGetters, mapMutations } von "vuex"
Standard exportieren{
    berechnet:{
        // Methode 1. Verwenden Sie dann Folgendes. Eigenschaftsname ... mapGetters (["Eigenschaft 1 von getters.js einführen", "Eigenschaft 2"])
        // Methode 2 ... mapGetters("Benutzer", ["Attribut 1 im Benutzermodul", "Attribut 2"])
    },
    Methoden:{
        // Methode 1. Verwenden Sie dann Folgendes. Eigenschaftsname ... mapMutations (["Methode 1 aus mutations.js","Methode 2"])
        // Methode 2...mapMutations("user",["Methode 1 aus dem Benutzermodul","Methode 2"])
    }
}

// Oder Sie können this.$store.state.xxx auch so abrufen
dies.$store.state.user.xxx

11. $Wurzel

$root kann die Daten und Methoden in App.vue abrufen

12. Schlitz

Dabei werden die Daten der untergeordneten Komponente über den Steckplatz an die übergeordnete Komponente übergeben und anschließend wieder eingefügt.

// Kind.vue
<Vorlage>
    <div>
        <slot :user="Benutzer"></slot>
    </div>
</Vorlage>
Standard exportieren{
    Daten(){
        zurückkehren {
            Benutzer: { Name: "Muhua" }
        }
    }
}

// Übergeordnetes Element.vue
<Vorlage>
    <div>
        <child v-slot="slotProps">
            {{ slotProps.Benutzername }}
        </child>
    </div>
</Vorlage>

Damit ist dieser Artikel über 12 Arten der Komponentenkommunikation in Vue2.x abgeschlossen. Weitere relevante Inhalte zur Vue2.x-Komponentenkommunikation finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Der Unterschied und die Verwendung des Kommunikationsbusses der Bruderkomponenten von Vue2 und Vue3
  • Entwicklungsbeispiel für die Kommunikation zwischen übergeordneten und untergeordneten Komponenten in Vue.js
  • Kommunikation zwischen übergeordneten und untergeordneten Komponenten in Vue und Verwendung von Sync zum Synchronisieren der Daten übergeordneter und untergeordneter Komponenten
  • Entwicklung der To-Do-Liste-Komponentenfunktion in der Eltern-Kind-Komponentenkommunikation in Vue
  • Zusammenfassung der 10 Komponentenkommunikationsmethoden in Vue3

<<:  Lösung für das Problem, dass die Tomcat-Konfiguration in Intelli Idea nicht gefunden wird

>>:  Bearbeiten Sie zwei Datenspalten als neue Spalten in SQL

Artikel empfehlen

Verwenden von CSS3 zum Implementieren eines Schriftfarbverlaufs

Beim Verwenden von Animation.css habe ich festges...

Erfahren Sie mehr über MySQL-Datenbanken

Inhaltsverzeichnis 1. Was ist eine Datenbank? 2. ...

Detaillierte Analyse von MySQL-Deadlock-Problemen

Vorwort Wenn sich unser Geschäft in einem sehr fr...

Detaillierte Erklärung der verschiedenen Verwendungen von proxy_pass in nginx

Inhaltsverzeichnis Proxy-Weiterleitungsregeln Der...

Eine andere Art von „Abbrechen“-Button

Der „Abbrechen“-Button ist nicht Teil des notwend...

Hinweise zu den Formularkomponenten des Elements

Elementform und Codeanzeige Weitere Einzelheiten ...

Detaillierter Vue-Code zur Implementierung der Shuttle-Box-Funktion

Vue - Implementierung der Shuttle-Box-Funktion. D...

Analyse der Benutzererfahrung beim Design von Facebook-Dating-Websites

<br />Verwandter Artikel: Analyse der Inform...

Verständnis für Webdesign-Layout

<br />Hier ergibt sich ein Widerspruch: In k...

Definition und Funktion des zoom:1-Attributs in CSS

Heute wurde ich gefragt, wozu das Zoom-Attribut i...