vue3のテレポート瞬間移動機能の使い方を詳しく解説

vue3のテレポート瞬間移動機能の使い方を詳しく解説

vue3テレポート瞬間移動機能の使用は参考用です。具体的な内容は次のとおりです。

テレポートは通常、瞬間テレポートコンポーネントと翻訳されますが、実際には理解するのが難しいです。私は「独立したコンポーネント」と理解しています。

書き込んだコンポーネントを任意の DOM にマウントできるため、非常に自由かつ独立しています。

例: ポップアップコンポーネントの作成

<テンプレート>
<テレポート先="#modal">
 <div id="center" v-if="isOpen">
 <h2><slot>これはモーダルです</slot></h2>
 <button @click="buttonClick">閉じる</button>
 </div>
</テレポート>
</テンプレート>
<script lang="ts">

エクスポートデフォルト{
 小道具: {
 isOpen: ブール値、
 },
 放出:
 'クローズモーダル': null
 },
 セットアップ(プロパティ、コンテキスト) {
 const ボタンクリック = () => {
 context.emit('モーダルを閉じる')
 }
 戻る {
 ボタンクリック
 }
 }
}
</スクリプト>
<スタイル>
 #中心 {
 幅: 200ピクセル;
 高さ: 200px;
 境界線: 2px 黒一色;
 背景: 白;
 位置: 固定;
 左: 50%;
 上位: 50%;
 左マージン: -100px;
 上マージン: -100px;
 }
</スタイル>

app.vue で使用する場合は、通常のコンポーネントを呼び出すのと同じです。

<テンプレート>
<div id="アプリ">
 <img alt="Vue ロゴ" src="./assets/logo.png">
 <HelloWorld msg="Vue.js アプリへようこそ"/>
 <フックデモ></フックデモ>
 <button @click="openModal">モーダルを開く</button><br/>
<modal :isOpen="modalIsOpen" @close-modal="onModalClose"> 私のモーダル !!!!</modal>
</div>
 
</テンプレート>
<スクリプト>
'./components/HelloWorld.vue' から HelloWorld をインポートします。
'./components/HooksDemo.vue' から HooksDemo をインポートします。
'./components/Modal.vue' から Modal をインポートします。
'vue' から{ref}をインポートします
エクスポートデフォルト{
 名前: 'アプリ'、
 コンポーネント:
 こんにちは世界、
 フックデモ、
 モーダル
 },
 設定() {
 定数 modalIsOpen = ref(false)
 定数オープンモーダル = () => {
 modalIsOpen.値 = true
 }
 定数onModalClose = () => {
 modalIsOpen.値 = false
 }
 戻る {
 モーダルが開いている、
 オープンモーダル、
 オンモーダルクローズ
 }
 }
}
</スクリプト>

<スタイル>
#アプリ {
 フォントファミリー: Avenir、Helvetica、Arial、sans-serif;
 -webkit-font-smoothing: アンチエイリアス;
 -moz-osx-font-smoothing: グレースケール;
 テキスト配置: 中央;
 色: #2c3e50;
 上マージン: 60px;
}
</スタイル>

app.vueファイルで使用する場合、モーダルはアプリのDOMノードの下にあり、親ノードのDOM構造とCSSがモーダルに影響し、問題が発生します。

1. モーダルは他のコンポーネントでラップされており、簡単に干渉される
2. スタイルは他のコンポーネントにも存在するため、非常に混乱しやすくなります。

Teleport は、モーダル コンポーネントを #app 内にネストする必要がないため、相互に干渉することなく、レンダリングしたい外部 DOM にモーダル コンポーネントをレンダリングできます。Teleport、コンポーネントを任意の場所に転送するためのポータルと考えることができます。これを使用する場合、 to属性によって、コンポーネントをマウントする DOM ノードを決定できます。

<テンプレート>
 <テレポート先="#modal">
 <div id="center">
 <h2>より良い</h2>
 </div>
 </テレポート>
</テンプレート>

publicフォルダの下のindex.htmlにノードを追加します。

<!DOCTYPE html>
<html lang="ja">
 <ヘッド>
 <メタ文字セット="utf-8">
 <meta http-equiv="X-UA-compatible" content="IE=edge">
 <meta name="viewport" content="width=デバイス幅,初期スケール=1.0">
 <link rel="icon" href="<%= BASE_URL %>favicon.ico" >
 <title><%= htmlWebpackPlugin.options.title %></title>
 </head>
 <本文>
 <スクリプトなし>
 <strong>申し訳ありませんが、JavaScript が有効になっていないと <%= htmlWebpackPlugin.options.title %> は正しく動作しません。続行するには JavaScript を有効にしてください。</strong>
 </noscript>
 <div id="アプリ"></div>
 <div id="モーダル"></div>
 <!-- ビルドされたファイルは自動的に挿入されます -->
 </本文>
</html>

このように、モーダル コンポーネントがアプリの下にマウントされておらず、アプリ コンポーネントの影響を受けていないことがわかります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します
  • Vue3 での Teleport の使用に関する詳細な説明
  • Vue3 Teleportの実践と原理の詳細な説明
  • vue2 で vue3 のテレポートを実装する方法

<<:  Server-U 14バージョンのインストールと使用方法

>>:  mysql 5.7.18 winx64 パスワード変更

推薦する

CentOS のファイルと権限の基本操作チュートリアル

序文始める前に、ファイル属性とファイル属性を変更する方法について簡単に理解しておく必要があります。 ...

Python 仮想環境のインストールとアンインストールの方法と発生する問題

Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

Docker を使用して Jenkins をインストールするためのサンプル コード

Dockerコンテナのインストール時に遭遇しやすい2つの問題1.ポートはすでに割り当てられています(...

Linuxプロセス通信におけるFIFOの実装

FIFO通信(先入れ先出し)関連のないプロセス間の通信を可能にする FIFO 名前付きパイプ。パイプ...

vscodeを使用してReact Native開発環境を構築する方法を教えます

質問コードにはプロンプトがありません: RN 開発に不慣れな、フロントエンド以外の学生の多くは、「ど...

Linux で SpringBoot jar プログラム デプロイメント シェル スクリプトを起動および停止する方法

では早速、コードをお見せしましょう。具体的なコードは次のとおりです。 #!/bin/bash cd ...

JS でタブ効果を書く

この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...

Docker を使用して MySQL および Redis サービスをデプロイする方法

目次Dockerを使用してMySQLサービスをデプロイする方法DockerでRedisサービスをデプ...

純粋な CSS で実装された 3 つの通知バーのスクロール効果

序文通知バー コンポーネントは、比較的一般的なコンポーネントです。基本的に、すべてのサイトにこのよう...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

MySQLからHiveにさらにデータをインポートするためのソリューション

元の派生コマンド: bin/sqoop インポート -connect jdbc:mysql://19...

フォーム OnSubmit と input type=image の使用の概要

ここに <input type="image"> がある場合、この画...

Win2008 R2 mysql 5.5 zip 形式 mysql のインストールと設定

Win2008 R2 zip形式のMySQLのインストールと設定1. Baidu MySQL 5.6...

MysqlクエリJSON結果に関連する関数の概要

JSON 形式のフィールドは、MySQL 5.7 で追加された新しい属性ですが、基本的には文字列とし...