Eine ausführliche Erklärung zur Verwendung der Teleport-Komponente in Vue
Wie verwende ich die Teleport-Komponente in Vuejs? Der folgende Artikel zeigt Ihnen, wie Sie die Teleport-Komponente in Vue verwenden. Ich hoffe, er wird Ihnen helfen!
In Komponenten mit einer relativ komplexen DOM
-Struktur und tiefer hierarchischer Verschachtelung muss eine gewisse Logik basierend auf dem entsprechenden Modulgeschäft verarbeitet werden. Diese Logik gehört zur aktuellen KomponenteDOM
结构相对比较复杂,层级嵌套比较深的组件内,需要根据相对应的模块业务处理一些逻辑,该逻辑属于当前组件
但是从整个页面应用的视图上看,它在DOM
中应该被渲染在整个vue
应用外部的其他地方,不能影响组件的结构
比较常见的应用场景:就是全屏的模态框,控制元素的位置,也是可以处理的,但是比较麻烦
在理想情况下,我们希望在具体的组件中,给元素绑定的事件,与具体要控制的DOM
元素结构在同一个组件中,具体的位置处,保持一定的相关联性。【相关推荐:vuejs视频教程、web前端开发】
而不用特意的把一些DOM
结构给分离出去,然而,在同一组件中,触发模态框的按钮和模态框本身在同一组件中
因为他们都与组件的开关状态有相关联,模态框与按钮一起渲染在应用DOM
结构很深的地方,会导致模态框的css布局位置非常难控制
鉴于这样的场景和困难,Vue
官方提供了一个Teleport
组件,很好的可以解决这个问题,让开发者不需要顾虑DOM
结构的问题
01-组件套组件层次结构很深时
比如:现在有两个组件,父组件,子组件,在后代组件内,添加一个按钮,弹出一个模态框,让它在页面垂直水平居中显示
如下所示,父组件如下所示App.vue
<template> <div class="App"> 我是父组件 <Child /> </div> </template> <script setup> import Child from "./Child.vue" </script> <style> .App { width: 400px; height: 400px; background:red; } </style>
如下是Child
组件,示例代码如下所示Child.vue
,我们需要在孙(后代)组件,添加一个按钮,点击按钮,弹出一个弹框,水平垂直居中显示在页面中央
<template> <div class="child"> <p>我是子组件</p> <button @click="isModel=true">打开模态框</button> <div class="mask-dialog" v-if="isModel"> <div class="box"> <h2>我是标题</h2> <div>我是弹框内容</div> <div> <button @click="isModel=false">关闭</button> </div> </div> </div> </div> </template> <script setup> import { ref } from "vue"; let isModel = ref(false); </script> <style> .child { width: 300px; height:300px; background:green; } /**灰色遮罩层 */ .mask-dialog { width: 100%; height:100%; position:absolute; left:0; top:0; background:rgba(0,0,0,0.5) } .box { width: 200px; height:200px; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); background:pink; text-align:center; } </style>
上面的子组件中有一个button
按钮来触发打开当前组件的模态框,里面存在着控制弹框的显示和隐藏的逻辑,当嵌套的组件比较深,复杂时
如果父级元素存在定位,那在控制子元素的位置时,用css
的transform
或者position:absolute
,参照对象的变更,会破坏布局结构,会出现一些css
样式
控制的问题,解决起来会非常的痛苦
那这个Teleport
组件就是为了解决这类问题,可以将指定的DOM
结构片段,独立于到组件外面去,不受当前组件布局结构的影响
经过Teleport
的修改后
<template> <div class="child"> <p>我是子组件</p> <button @click="isModel=true">打开模态框</button> <Teleport to="body"> <div class="mask-dialog" v-if="isModel"> <div class="box"> <h2>我是标题1</h2> <div>我是弹框内容</div> <div> <button @click="isModel=false">关闭</button> </div> </div> </div> </Teleport> </div> </template> <script setup> import { ref } from "vue"; let isModel = ref(false); </script> <style> .child { width: 300px; height:300px; background:green; } /**灰色遮罩层 */ .mask-dialog { width: 100%; height:100%; position:absolute; left:0; top:0; background:rgba(0,0,0,0.5) } .box { width: 200px; height:200px; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); background:pink; text-align:center; } </style>
<Teleport>
接收一个 to prop
来指定传送的目标。to
的值可以是一个 CSS
选择器字符串,或id
,也可以是一个 DOM
元素对象。这段代码的作用就是告诉 Vue
把以下模板片段传送到 body
标签下
<Teleport to="#some-id">html结构代码</Teleport> <Teleport to=".some-class">html结构代码</Teleport> <Teleport to="body">html结构代码</Teleport> <Teleport to="html">html结构代码</Teleport>
02-Teleport组件
它是Vue
官方提供的一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM
结构外层的位置去
也就是一种能够将我们的组件html
结构移动到指定位置的技术
<teleport to="移动到指定的位置,可以是html,body,或id,class"> 里面是Html结构模板内容 </teleport>
注意
<Teleport>
挂载时,传送的 to
目标必须已经存在于DOM
中。理想情况下,这应该是整个 Vue
应用 DOM
树外部的一个元素。如果目标元素也是由 Vue
渲染的,你需要确保在挂载 <Teleport>
之前先挂载该元素
这个teleport
将指定的模板html
,放置到页面当中指定的位置处,它是有条件的,不是可以任意传送的
在安装组件之前,目标元素必须存在,即,目标不能由组件本身呈现,理想情况下应该位于整个Vue
组件树之外。
如下代码是不行的
<template> <div> <Teleport to=".content"> <div>我是头部的内容</div> </Teleport> </div> <div> 底部内容 <div></div> </div> </template> <script setup> </script> <style> h1 { color: red; } </style>
03-需要知道的
teleport
只是改变了渲染的 DOM
结构,它不会影响组件间的逻辑关系。也就是说,如果 <Teleport>
包含了一个组件,那么该组件始终和这个使用了 <teleport>
的组件保持逻辑上的父子关系。传入的 props
DOM
an anderen Stellen außerhalb der gesamten vue
-Anwendung gerendert werden und darf die Struktur der Komponente nicht beeinflussen🎜🎜Ein häufigeres Problem Anwendungsszenario: Das heißt, Modalboxen im Vollbildmodus können ebenfalls verarbeitet werden, um die Position von Elementen zu steuern, dies ist jedoch problematischer🎜🎜Im Idealfall hoffen wir, dass die an Elemente in bestimmten Komponenten gebundenen Ereignisse mit dem spezifischen < zusammenhängen code>Zu steuerndes DOMDie Elementstruktur behält an bestimmten Stellen in derselben Komponente ein gewisses Maß an Relevanz bei. [Verwandte Empfehlungen: vuejs Video-Tutorial, Web-Frontend-Entwicklung]🎜🎜ohne dass etwas DOM</ eingefügt werden muss Code >Die Struktur ist getrennt, jedoch befinden sich in derselben Komponente die Schaltfläche, die die Modalbox auslöst, und die Modalbox selbst in derselben Komponente🎜🎜Da beide mit dem Schaltzustand der Komponente, der Modalbox und verknüpft sind Die Schaltflächen werden beim Anwenden von <code>DOM
, bei dem die Struktur sehr tief ist, zusammen gerendert, wodurch es sehr schwierig wird, die CSS-Layoutposition der modalen Box zu steuern. 🎜🎜Angesichts solcher Szenarien und Schwierigkeiten hat Vue
bietet offiziell eine Teleport
-Komponente, die dieses Problem sehr gut lösen kann, sodass sich Entwickler keine Gedanken über die DOM
-Struktur 🎜01-Component Set Wenn die Komponentenhierarchie sehr tief ist
🎜Zum Beispiel: Jetzt gibt es zwei Komponenten, eine übergeordnete Komponente und eine untergeordnete Komponente. Fügen Sie in der untergeordneten Komponente eine Schaltfläche hinzu, um eine zu öffnen modales Feld und lassen Sie es vertikal und horizontal in der Mitte der Seite anzeigen🎜🎜 Wie unten gezeigt, lautet die übergeordnete Komponente wie folgt:App.vue
🎜<Teleport :disabled="isMobile"> ... </Teleport>
Child
Komponente, und der Beispielcode lautet wie folgt: Child.vue
, Wir müssen der Enkelkomponente (Nachkomme) eine Schaltfläche hinzufügen. Klicken Sie auf die Schaltfläche. Ein Popup-Fenster wird geöffnet nach oben und es wird horizontal und vertikal in der Mitte der Seite angezeigt Wenn die verschachtelte Komponente tief und komplex ist und das übergeordnete Element über eine Positionierung verfügt, verwenden Sie <, um die Position des untergeordneten Elements zu steuern code>transform oder position:absolute
, das Ändern des Referenzobjekts wird die Layoutstruktur zerstören und einige css
-Stile werden angezeigt 🎜🎜Kontrollprobleme werden sehr schmerzhaft sein zu lösen🎜🎜Dann soll diese Teleport
-Komponente diese Art von Problem lösen. Sie kann das angegebene DOM
-Strukturfragment unabhängig von der Außenseite der Komponente machen und wird dadurch nicht beeinflusst die aktuelle Komponentenlayoutstruktur🎜🎜Nach der Änderung durch Teleport
🎜<Teleport to=".content"> <div>A</div> </Teleport> <Teleport to=".content"> <div>B</div> </Teleport>
<Teleport>
Erhält einen to prop</code >, um das Ziel der Teleportation anzugeben . Der Wert von <code>to
kann ein CSS
-Selektorstring oder eine id
sein, oder er kann ein DOM
-Elementobjekt sein . Der Zweck dieses Codes besteht darin, Vue
anzuweisen, das folgende Vorlagenfragment an das body
-Tag🎜<div class="content"> <div>A</div> <div>B</div> </div>
02-Teleport zu senden Komponente< /h2>🎜Es handelt sich um eine integrierte Komponente, die offiziell von Vue
bereitgestellt wird. Sie kann einen Teil der Vorlage innerhalb einer Komponente an die Position der äußeren Ebene des „übertragen“. DOM
-Struktur der Komponente go
Es handelt sich um eine Technologie, die unsere Komponenten-html
-Struktur an einen bestimmten Ort verschieben kann to
target muss bereits im DOM
vorhanden sein. Idealerweise sollte dies ein Element außerhalb des gesamten DOM
-Baums der Vue
-Anwendung sein. Wenn das Zielelement auch von Vue
gerendert wird, müssen Sie sicherstellen, dass das Element gemountet wird, bevor Sie <Teleport>
mounten. 🎜🎜Dieser teleport
Platzieren Sie die angegebene Vorlage html
an der angegebenen Position auf der Seite. Sie ist bedingt und kann nicht beliebig übertragen werden. Vor der Installation der Komponente muss das Zielelement vorhanden sein. Die Komponente wird gerendert selbst, der sich idealerweise außerhalb des gesamten Vue
-Komponentenbaums befinden sollte. 🎜🎜Der folgende Code wird nicht funktionieren🎜rrreee03-Was Sie wissen müssen
🎜teleport
ändert nur das gerenderte DOM code> Struktur hat keinen Einfluss auf die logische Beziehung zwischen Komponenten. Mit anderen Worten: Wenn <Teleport>
eine Komponente enthält, dann behält die Komponente immer eine logische Eltern-Kind-Beziehung mit der Komponente bei, die <teleport>
verwendet. Eingehende props
und ausgelöste Ereignisse funktionieren ebenfalls wie gewohnt. 🎜这也意味着来自父组件的注入也会按预期工作,子组件将在 Vue Devtools
中嵌套在父级组件下面,而不是放在实际内容移动到的地方
位置移动了,提现在结构模板上,但是数据逻辑依旧存在关联的
04-如何禁用 Teleport
在某些场景下可能需要视情况禁用 <Teleport>
。举例来说,我们想要在桌面端将一个组件当做浮层来渲染,但在移动端则当作行内组件。我们可以通过对 <Teleport>
动态地传入一个 disabled prop
来处理这两种不同情况
<Teleport :disabled="isMobile">
...
</Teleport>
Nach dem Login kopierenNach dem Login kopieren这里的 isMobile
状态可以根据 CSS media query
的不同结果动态地更新
05-多个 Teleport 共享目标时
一个可重用的模态框组件可能同时存在多个实例。对于此类场景,多个 <Teleport>
组件可以将其内容挂载在同一个目标元素上,而顺序就是简单的顺次追加,后挂载的将排在目标元素下更后面的位置上
比如下面这样的用例
<Teleport to=".content">
<div>A</div>
</Teleport>
<Teleport to=".content">
<div>B</div>
</Teleport>
Nach dem Login kopierenNach dem Login kopieren渲染的结果为
<div class="content">
<div>A</div>
<div>B</div>
</div>
Nach dem Login kopierenNach dem Login kopieren总结
这个teleport
组件在实际开发中还是很实用的,能够解决当组件嵌套层级很深,而后代组件中的模板,想要脱离当前组件结构,解决css
布局层面的干扰,那就可以用这个teleport
组件
Das obige ist der detaillierte Inhalt vonEine ausführliche Erklärung zur Verwendung der Teleport-Komponente in Vue. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
<Teleport>
eine Komponente enthält, dann behält die Komponente immer eine logische Eltern-Kind-Beziehung mit der Komponente bei, die <teleport>
verwendet. Eingehende props
und ausgelöste Ereignisse funktionieren ebenfalls wie gewohnt. 🎜这也意味着来自父组件的注入也会按预期工作,子组件将在 Vue Devtools
中嵌套在父级组件下面,而不是放在实际内容移动到的地方
位置移动了,提现在结构模板上,但是数据逻辑依旧存在关联的
04-如何禁用 Teleport
在某些场景下可能需要视情况禁用 <Teleport>
。举例来说,我们想要在桌面端将一个组件当做浮层来渲染,但在移动端则当作行内组件。我们可以通过对 <Teleport>
动态地传入一个 disabled prop
来处理这两种不同情况
<Teleport :disabled="isMobile"> ... </Teleport>
这里的 isMobile
状态可以根据 CSS media query
的不同结果动态地更新
05-多个 Teleport 共享目标时
一个可重用的模态框组件可能同时存在多个实例。对于此类场景,多个 <Teleport>
组件可以将其内容挂载在同一个目标元素上,而顺序就是简单的顺次追加,后挂载的将排在目标元素下更后面的位置上
比如下面这样的用例
<Teleport to=".content"> <div>A</div> </Teleport> <Teleport to=".content"> <div>B</div> </Teleport>
渲染的结果为
<div class="content"> <div>A</div> <div>B</div> </div>
总结
这个teleport
组件在实际开发中还是很实用的,能够解决当组件嵌套层级很深,而后代组件中的模板,想要脱离当前组件结构,解决css
布局层面的干扰,那就可以用这个teleport
组件
Das obige ist der detaillierte Inhalt vonEine ausführliche Erklärung zur Verwendung der Teleport-Komponente in Vue. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

Sie können die Vue -Version mit Vue Devtools abfragen, um die Registerkarte VUE in der Konsole des Browsers anzuzeigen. Verwenden Sie NPM, um den Befehl "npm list -g vue" auszuführen. Suchen Sie das Vue -Element im Objekt "Abhängigkeiten" der Datei package.json. Führen Sie für Vue -CLI -Projekte den Befehl "Vue --version" aus. Überprüfen Sie die Versionsinformationen im & lt; Skript & gt; Tag in der HTML -Datei, die sich auf die VUE -Datei bezieht.

Funktionsabfangen in VUE ist eine Technik, mit der die Häufigkeit, mit der eine Funktion eingerufen wird, innerhalb eines bestimmten Zeitraums aufgerufen wird und Leistungsprobleme verhindern. Die Implementierungsmethode lautet: Importieren Sie die Lodash -Bibliothek: importieren {dunounce} aus 'lodash'; Verwenden Sie die Dabounce -Funktion, um eine Intercept -Funktion zu erstellen: const dabouncedFunction = dunounce (() = & gt; { / logical /}, 500); Rufen Sie die Abfangfunktion auf und die Steuerfunktion wird höchstens einmal in 500 Millisekunden aufgerufen.
