Vue で Teleport コンポーネントを使用する方法の詳細な説明
Vuejs で Teleport コンポーネントを使用するにはどうすればよいですか?次の記事では、Vue で Teleport コンポーネントを使用する方法を説明します。
比較的複雑な DOM
構造と深い階層ネストを持つコンポーネントでは、一部のロジックは、対応するモジュール ビジネスに基づいて処理する必要があります。現在のコンポーネント
に属していますが、ページ アプリケーション全体から見ると、vue
アプリケーション全体の外側の DOM
でレンダリングされる必要があり、コンポーネントに影響を与えることはできません。コンポーネントの構造では、要素にバインドされたイベントは、同じコンポーネント内で特定の場所で制御される特定の
要素構造と一定の相関関係を維持します。 [関連する推奨事項:
vuejs ビデオ チュートリアル、Web フロントエンド開発
] ただし、一部の DOM 構造を意図的に分離する必要はありません。コンポーネント、モーダル ボックスをトリガーするボタン、およびモーダル ボックス自体は同じコンポーネント内にあります。
これらは両方ともコンポーネントのスイッチ状態に関連付けられているため、モーダル ボックスとボタンはアプリケーション内で一緒にレンダリングされます。 DOM
構造が非常に深い場合、モーダル ボックスの CSS レイアウト位置を制御することは非常に困難になります。
このようなシナリオと困難を考慮して、Vue
コンポーネントを公式に提供すると、この問題は非常にうまく解決できるため、開発者は DOM
##01 の構造について心配する必要がなくなります。コンポーネントのコンポーネント階層非常に奥が深い
例: 親コンポーネントと子コンポーネントの 2 つのコンポーネントがあります。子孫コンポーネントにモーダル ボックスをポップアップするボタンを追加し、中央に垂直方向と水平方向に表示します。
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
ボタンがあります。モーダル ボックスには、ポップアップ ボックスの表示と非表示を制御するロジックが含まれています。ネストされたコンポーネントが深くて複雑な場合親要素に位置決めがある場合、子要素の位置を制御するときに、
の transform
または
を使用してオブジェクトの変更を参照すると、レイアウト構造が破壊され、いくつかの css
styles## が表示されます。#コントロールの問題を解決するのは非常に困難です
この
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 tag
<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>
Note
<Teleport> マウントする場合、転送された to ターゲットは DOM
にすでに存在している必要があります。理想的には、これはVue アプリケーション
DOM ツリー全体の外側の要素である必要があります。ターゲット要素が
Vue によってもレンダリングされる場合は、
<Teleport> #指定されたテンプレートを配置する ## をマウントする前に、必ず要素
をマウントする必要があります。 #html
ページ上の指定された場所にあります。これは条件付きであり、任意に転送することはできません コンポーネントをインストールする前に、ターゲット要素が存在する必要があります。つまり、コンポーネント自体によってターゲットをレンダリングすることはできません。理想的には、
Vue
コンポーネント ツリー全体の外側に配置する必要があります。
次のコードは機能しません<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template>
<div>
<Teleport to=".content">
<div>我是头部的内容</div>
</Teleport>
</div>
<div>
底部内容
<div></div>
</div>
</template>
<script setup>
</script>
<style>
h1 {
color: red;
}
</style></pre><div class="contentsignin">ログイン後にコピー</div></div>
03-知っておくべきこと
はレンダリングされた DOM
を変更するだけです構造、コンポーネント間の論理関係には影響しません。つまり、
にコンポーネントが含まれている場合、そのコンポーネントは、
を使用するコンポーネントとの論理的な親子関係を常に維持します。受信した
props とトリガーされたイベントも通常どおりに機能します。 <p>这也意味着来自父组件的注入也会按预期工作,子组件将在 <code>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
组件
以上がVue で Teleport コンポーネントを使用する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

VUEマルチページ開発は、VUE.JSフレームワークを使用してアプリケーションを構築する方法です。アプリケーションは別々のページに分割されます。コードメンテナンス:アプリケーションを複数のページに分割すると、コードの管理とメンテナンスが容易になります。モジュール性:各ページは、簡単に再利用および交換するための別のモジュールとして使用できます。簡単なルーティング:ページ間のナビゲーションは、単純なルーティング構成を介して管理できます。 SEOの最適化:各ページには独自のURLがあり、SEOに役立ちます。

Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 &lt; script&gt;でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

VUEの関数傍受は、指定された期間内に関数が呼び出され、パフォーマンスの問題を防ぐ回数を制限するために使用される手法です。実装方法は次のとおりです。LodashLibrary:Import {Debounce}から「Lodash」からインポート。 debounce関数を使用して、インターセプト関数を作成します。インターセプト関数を呼び出すと、制御関数は500ミリ秒でせいぜい1回呼び出されます。
