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
Teil.0 Hintergrund Die Intranetserver des Unterne...
Code kopieren Der Code lautet wie folgt: <!DOC...
Installieren Sie mysql5.7 unter Win. Zu Ihrer Inf...
Inhaltsverzeichnis Vorwort Komponenten erstellen ...
Nach der Installation der neuesten Version 8.0.11...
In Node.js ist eine .js-Datei ein vollständiger B...
Inhaltsverzeichnis Bilderfassung durch SVG CSS-Te...
Heute fiel mir plötzlich ein, die Produktionsprinz...
Zuerst, bevor Sie posten! Nochmals vielen Dank an ...
So richten Sie einen MySQL-Kurzlink ein 1. Überpr...
sftp ist die Abkürzung für Secure File Transfer P...
/******************** * Anwendung von verknüpften...
Vorwort Wenn Sie wie ich ein fleißiger Java-Backe...
Wie können Sie das Lamaging von Routen vergessen,...
Inhaltsverzeichnis 1. Kontext 1. Anwendungsszenar...