Ein häufiges Szenario beim Schreiben von Geschäftstexten ist, dass Sie dasselbe Formular auf verschiedenen Seiten aufrufen müssen. Die übliche Interaktion besteht darin, das Formular in Form eines Popup-Fensters anzuzeigen. Manchmal ist es jedoch mühsam, die Formularkomponente auf jeder Seite wiederholt einzuführen. Es gibt zwei Lösungen:
Natürlich muss die Business-Dialogkomponente eine Reihe von Spezifikationen haben. Props empfängt einen onOk- und onCancel-Rückruf und definiert eine sichtbare Eigenschaft in den Daten. <Vorlage> <el-dialog :title="Titel" :visible.sync="sichtbar" an Text anhängen> <!-- Geschäftscode --> </el-dialog> </Vorlage> <Skript> Standard exportieren { props: ['onOk', 'Andere vom Unternehmen benötigte Eigenschaften'], Daten() { zurückkehren { sichtbar: false } } } </Skript> Vue2-SchreibenIch persönlich finde, dass es in Vue2 einfacher ist, es als Plug-In zu schreiben. Die Implementierung ist wie folgt. Einige Vorgänge werden mithilfe von Mixins ausgeführt, um es vom Geschäft zu entkoppeln. Der Nachteil besteht darin, dass die Komponente dynamisch eingefügt wird und Vue Devtools aktualisiert werden muss, um die Komponente anzuzeigen. konstanter Mixin = { montiert() { Dokument.Body.AnhängenKind(dies.$el) dies.sichtbar = wahr }, betrachten: sichtbar(Wert) { // Zerstöre die Instanz, nachdem die Animation endet if (value === false) { setzeTimeout(() => { dies.$zerstören() wenn (dies.$el && dies.$el.parentNode) { dies.$el.parentNode.removeChild(dies.$el) } }, 400) } } } } Standard exportieren { installieren(Vue, Optionen) { Vue.prototype.$dialog = (Name, Eigenschaften) => { // Relativ zum Speicherort des Plugins wird import('../components/dialogs/' + name) während der statischen Kompilierung überprüft .dann(Modul => { const-Komponente = Modul.Standard const mixins = Komponente.mixins || [] mixins.push(mixin) // Automatisch öffnen, Lebenszyklusfunktionen und Zerstörungsvorgänge dynamisch einmischen component.mixins = mixins gibt Vue.extend(Komponente) zurück }) .then(Dialog => { const dialog = neuer Dialog({ propsData: Requisiten || {} }) dialog.$mount() }) } } } Die aufrufende Methode ist wie folgt. Beachten Sie, dass der this-Zeiger des onOk-Rückrufs durch die Verwendung einer Pfeilfunktion vermieden werden kann. dies.$dialog('GroupEdit.vue', { Typ: 'Bearbeiten', Gruppe: {}, beiOk: () => { diese.freshList() } }) Schreiben der Vue3-Plugin-VersionLeider sind aufgrund des Upgrades von Vue3 Vue.extend und $mount verschwunden und Komponenten können nur in der Anwendung gerendert werden. Da die Daten zwischen den einzelnen Anwendungen isoliert sind, müssen Plug-Ins und Ähnliches erneut eingeführt werden. Gleichzeitig ist es auch problematisch, wenn Sie interagieren möchten. Es sollte möglich sein, dieselbe Vuex-Instanz einzuführen, aber ich habe es nicht ausprobiert. Um die Kopplung zu reduzieren, können Sie nur eine neue Anwendung erstellen, um das Rendering zu mounten importiere { createApp, defineComponent } aus 'vue' Importieren Sie ElementPlus von „element-plus“. konstanter Mixin = { montiert() { Dokument.Body.AnhängenKind(dies.$el) dies.sichtbar = wahr }, betrachten: sichtbar(Wert) { // Zerstöre die Instanz, nachdem die Animation endet if (value === false) { setzeTimeout(() => { dies.$.appContext.app.unmount() }, 400) } } } } Standard exportieren { installieren(App) { app.config.globalProperties.$dialog = (Name, Eigenschaften) => { importiere('../Komponenten/Dialogfelder/' + Name) .dann(Modul => { const-Komponente = Modul.Standard let mixins = Komponente.mixins || [] mixins.push(mixin) Komponente.mixins = Mixins returniere defineComponent(Komponente). }) .then(Dialog => { const app = createApp(Dialog, props || {}) app.use(ElementPlus) app.mount(Dokument.ErstellenElement('div')) }) } } } Dynamisches Schreiben von Vue3-KomponentenIn Vue3 erfüllt die Plug-In-Version auch die Anforderungen, es handelt sich jedoch um eine völlig neue Anwendung. Der Zugriff auf this.$root, vuex und router im Unternehmen ist immer noch etwas mühsam. Daher sind dynamische Komponenten in Vue3 besser. Führen Sie eine dynamische Komponente in die Stammkomponente ein und definieren Sie einige Steuervariablen <Vorlage> <Router-Ansicht></Router-Ansicht> <Komponente: ist = "currentDialog" v-bind = "currentDialogProps" /> </Vorlage> <Skript> Standard exportieren { Daten() { zurückkehren { currentDialog: null, currentDialogProps: null } } } </Skript> Wenn Sie this.$root.$dialog() aufrufen, sieht es zu hässlich aus. Tatsächlich können Sie die Wirkung des Plug-Ins immer noch manuell simulieren. const app = createApp(App) const vm = app.mount('#app') initDialog(app, vm) Funktion initDialog(App, VM) { konstanter Mixin = { montiert() { dies.sichtbar = wahr }, betrachten: sichtbar(Wert) { // Zerstöre die Instanz, nachdem die Animation endet if (value === false) { setzeTimeout(() => { this.$root.currentDialog = null dies.$root.currentDialogProps = {} }, 400) } } } } app.config.globalProperties.$dialog = (Name, Eigenschaften) => { importiere('./components/dialogs/' + name).then(module => { const-Komponente = Modul.Standard let mixins = Komponente.mixins || [] mixins.push(mixin) Komponente.mixins = Mixins // defineComponent(component) wird nicht benötigt vm.currentDialog = markRaw(Komponente) vm.currentDialogProps = markRaw(props || {}) }) } } Einige Hacks zum SchreibenDie Vue3-Komponenteninstanz erhält die Anwendungsinstanz vm.$.appContext.app == app Die Vue3-Anwendungsinstanz ruft die Komponenteninstanz ab. Beachten Sie, dass _instance nur in der Entwicklungsumgebung zugänglich ist. app._instance.proxy == vm app._instance.root.proxy == vm app._instance.ctx.$root == vm Es gibt zwar noch einige Tricks, diese sollte man aber besser nicht anwenden. const app = createApp(App) const vm = app.mount('#app') wenn (Prozess.Umgebung.NODE_ENV === 'Produktion') { app._instance = { Proxy: VM, Wurzel: { Proxy: vm }, ctx: { $root:vm } } } Dies ist das Ende dieses Artikels über die Implementierung der Dialogkapselung durch Vue. Weitere relevante Inhalte zur Dialogkapselung durch Vue 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:
|
<<: Implementierung von Linux-Dateisystemvorgängen
>>: Mysql-Fehler: Lösung für zu viele Verbindungen
1. Laden Sie das RPM-Paket für Linux herunter htt...
Rendering-Pipeline mit externen CSS-Dateien In de...
Versatz Offset ist der Offset. Mithilfe der Offse...
1. Entfernen Sie Backslashes mit der Methode „str...
In vertikaler Richtung können Sie die Zellenausri...
Ohne weitere Umschweife hier ein Demobild. Die im...
Heute zeige ich Ihnen ein mit nativem JS implemen...
In diesem Artikel wird der spezifische Code für J...
Standortausdruckstyp ~ bedeutet, dass ein regulär...
In einer komplexen Tabellenstruktur erstrecken si...
Dabei wird das Bild als Hintergrund verwendet und...
Lesetipp: Navicat12.1 Serie Cracking und Aktivier...
1. Hintergrund Schaltflächen werden sehr häufig v...
React-Lebenszyklus Zwei Bilder zum besseren Verst...
Die Installation von MySQL 5.7 auf Ubuntu 1804 wi...