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
In diesem Artikelbeispiel wird der spezifische Ja...
1. Installieren Sie das Fcitx-Eingabeframework Zu...
Dieser Artikel stellt hauptsächlich die Implement...
Linux-Systemversion: CentOS7.4 MySQL-Version: 5.7...
Inhaltsverzeichnis 1. Was ist Blockbereich? 2. Wa...
1. Rendern JD-Effekt Simulationseffekt 2. Grundsa...
Inhaltsverzeichnis 1. Über JavaScript 2. JavaScri...
1. Führen Sie Schriftarten aus, öffnen Sie den Sc...
MYSQL 5.6 Bereitstellung und Überwachung der Slav...
Die Ausführungsreihenfolge der SQL-Abfrageanweisu...
In diesem Artikelbeispiel wird der spezifische Co...
Null: Alte Version deinstallieren Ältere Versione...
Vor kurzem habe ich in meinem Projekt vuethink ve...
MySQL-Dirty-Pages Aufgrund des WAL-Mechanismus er...
Seit kurzem ist https auch auf dem Handy möglich....