Zu lösendes ProblemHauptsächlich für die ebenenübergreifende Kommunikation zwischen Komponenten Warum müssen Sie Dispatch und Broadcast selbst implementieren?Denn bei der Entwicklung unabhängiger Komponenten oder Bibliotheken ist es am besten, sich nicht auf Bibliotheken von Drittanbietern zu verlassen Warum nicht „Provide“ und „Inject“ verwenden? Da das Verwendungsszenario hauptsächlich darin besteht, dass untergeordnete Komponenten den Status übergeordneter Komponenten erhalten, wird zwischen ebenenübergreifenden Komponenten eine aktive Bereitstellungs- und Abhängigkeitsinjektionsbeziehung hergestellt. Der Code lautet wie folgt: emitter.js Funktion Broadcast (Komponentenname, Ereignisname, Parameter) { dies.$children.forEach(child => { const name = untergeordnetes Element.$Optionen.name; wenn (Name === Komponentenname) { Kind.$emit.apply(Kind, [Ereignisname].concat(Parameter)); } anders { // todo Wenn params ein leeres Array ist, erhält es undefined broadcast.apply(Kind, [Komponentenname, Ereignisname].concat([Parameter])); } }); } Standard exportieren { Methoden: { dispatch(Komponentenname, Ereignisname, Parameter) { lass übergeordnetes Element = dies.$übergeordnetes Element || dies.$wurzel; lass name = übergeordnetes Element.$options.name; während (übergeordnetes Element && (!name || name !== Komponentenname)) { Elternteil = Elternteil.$Elternteil; wenn (Elternteil) { Name = übergeordnetes Element.$Optionen.Name; } } wenn (Elternteil) { übergeordnetes Element.$emit.apply(übergeordnetes Element, [Ereignisname].concat(Parameter)); } }, Broadcast(Komponentenname, Ereignisname, Parameter) { broadcast.call(dies, Komponentenname, Ereignisname, Parameter); } } }; übergeordnetes Element <Vorlage> <div> <h1>Ich bin die übergeordnete Komponente</h1> <button @click="handleClick">Ereignis auslösen</button> <child /> </div> </Vorlage> <Skript> importiere Emitter aus "@/mixins/emitter.js"; importiere Kind aus "./child"; Standard exportieren { Name: "KomponenteA", Mixins: [Emitter], erstellt() { dies.$on("Kind-zu-p", dies.handleChild); }, Methoden: { handleKlick() { this.broadcast("KomponenteB", "On-Message", "Hallo Vue.js"); }, handleChild(Wert) { Alarm(Wert); } }, Komponenten: Kind } }; </Skript> Kind.vue <Vorlage> <div>Ich bin eine untergeordnete Komponente</div> </Vorlage> <Skript> importiere Emitter aus "@/mixins/emitter.js"; Standard exportieren { Name: "KomponenteB", Mixins: [Emitter], erstellt() { dies.$on("on-message", dies.showMessage); this.dispatch("KomponenteA", "Kind-zu-P", "Hallo Elternteil"); }, Methoden: { Nachricht anzeigen(Text) { Fenster.Alarm(Text); } } }; </Skript> Auf diese Weise kann eine benutzerdefinierte Kommunikation zwischen Komponenten auf verschiedenen Ebenen erreicht werden. Dabei ist jedoch ein Problem zu beachten: Das Abonnement muss vor der Veröffentlichung erfolgen, d. h. „on“ muss vor „emit“ kommen. Renderreihenfolge für übergeordnete und untergeordnete Komponenten, Reihenfolge der Instanzerstellung Die untergeordnete Komponente wird vor der übergeordneten Komponente gerendert. Wenn also das Mount-Ereignis der untergeordneten Komponente ausgelöst wird, ist es beim Mounten in der übergeordneten Komponente nicht zu hören. Dies ist das Ende dieses Artikels über Vues selbst implementiertes Dispatch und Broadcast (Dispatch und Broadcast). Weitere relevante Inhalte zu Vue Dispatch und Broadcast 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:
|
<<: So ändern Sie das Root-Passwort in MySQL 5.7
>>: So implementieren Sie eine automatische Remote-Sicherung von MongoDB unter Linux
Das Unternehmen hat kürzlich einen DELL R730-Serv...
Der Nginx 502 Bad Gateway-Fehler ist mir schon me...
Ich habe vor Kurzem meine persönliche Website neu...
Die Schritte sind wie folgt 1. Erstellen Sie eine...
Informationen zum Miniprogramm-Datencache Datenca...
【1】Tags <i></i> und <em></em...
Merkmale einer Single-Page-Anwendung „Annahme:“ A...
1. Mathematische Funktionen ABS(x) gibt den Absol...
Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte...
<br />Bevor Browser die nächste Generation v...
Für jedes DBMS sind die Indizes der wichtigste Op...
Erlaube './' relative Pfade in docker-com...
Einführung Die Docker-Community hat viele Open-So...
Vorwort Standardmäßig initialisiert MySQL einen g...
Downloadlink: Betriebsumgebung CentOS 7.6 in eine...