Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

序文:

Vue 3.0主に以下のシナリオを解決するために使用される組み込みコンポーネントteleportが追加されました。

コンポーネントのテンプレートの一部が論理的にはそのコンポーネントに属している場合もありますが、技術的な観点からは、テンプレートのこの部分を Vue アプリ外のDOM内の別の場所に移動する方が適切Vue app

シナリオ例:クリックするとモーダルダイアログボックスを開くButton

このモーダル ダイアログ ボックスのビジネス ロジックの場所は間違いなくこのButtonに属しますが、 DOM構造によれば、モーダル ダイアログ ボックスの実際の場所はアプリケーション全体の中央にある必要があります。

これにより問題が発生します。コンポーネントの論理的な位置がDOM位置と同じ場所ではありません。

これまでのVue2慣例によれば、ダイアログ ボックスは通常position: fixed ; などの CSS プロパティを使用してアプリケーションの中央に配置されます。これは最後の手段です。次にteleportの基本的な使用方法を示します。

1. テレポートの使用

使い方は非常に簡単です。コンポーネントを目的の位置にレンダリングするには、to 属性を使用するだけです。

// body タグにレンダリングします <teleport to="body">
  <div class="modal">
    私はテレポートしたモーダルです! 
  </div>
</テレポート>

以下も使用できます:

<teleport to="#some-id" />
<teleport to=".some-class" />
<teleport to="[data-teleport]" />


有効なクエリセレクターまたはHTMLElement
である必要がありますHTMLElement

さらに遠く

2. モーダルダイアログコンポーネントを完成させる

では、標準のモーダルダイアログボックスをカプセル化してみましょう

<テンプレート>
  <テレポート先="body">
    <トランジション名="ダイアログフェード">
      <div class="dialog-wrapper" v-show="visible">
        <div class="ダイアログ">
          <div class="ダイアログヘッダー">
            <スロット名="タイトル">
              <span class="ダイアログタイトル">
                {{ タイトル }}
              </span>
            </スロット>
          </div>
          <div class="ダイアログボディ">
            <スロット></スロット>
          </div>
          <div class="ダイアログフッター">
            <スロット名="フッター">
              <button @click="onClose">閉じる</button>
            </スロット>
          </div>
        </div>
      </div>
    </トランジション>
  </テレポート>
</テンプレート>

<スクリプト>
'vue' から defineComponent をインポートします。

エクスポートデフォルトdefineComponent({
  名前: 'tdialog'
});
</スクリプト>

<スクリプトの設定>
const props = defineProps({
  タイトル: 文字列、
  表示: ブール値
});

const 出力 = defineEmits(['close']);

定数 onClose = () => {
  出力('閉じる');
};
</スクリプト>

使用する際は、

<t-dialog title="LGD は無敵です" :visible="visible" @close="onClose"> これはコンテンツの一部です、Xiaose Xianbei。 </t-ダイアログ>

// ...
const 可視 = ref(false);

定数onDialog = () => {
  表示される値 = !表示される値;
};

定数 onClose = () => {
  表示値 = false;
};

さらに一歩進んで

3. コンポーネントのレンダリング

上記で、標準のモーダル ダイアログ コンポーネントが完成しました。少量のテキストのみを表示する、同様の軽量プロンプト コンポーネントMessage存在します。

上記の例では、 TDialogコンポーネントは必ず使用する場所に記述しますが、このMessgaeコンポーネントでは、プロンプトを表示したいときに呼び出すjsステートメントを使用します。次のようになります。

// プロンプトを呼び出します Message({ message: 'This is a Message' });


関数を使用して呼び出す場合は、この関数を準備する必要があります。この関数の機能は、コンポーネントのレンダリングを完了することです。

const メッセージ = オプション => {
  // コンテナをレンダリングする準備をする const container = document.createElement('div');
  // vnode を生成する
  const vnode = createVNode(メッセージコンストラクタ、オプション);
  // レンダリングレンダー(vnode, コンテナ);
};


MessageConstructorとは何ですか?これは SFC (単一ファイル コンポーネント) です。

<テンプレート>
  <テレポート先="#app">
    <transition name="メッセージフェード">
      <div v-show="visible" ref="ins" class="message" :style="customStyle">{{ メッセージ }}</div>
    </トランジション>
  </テレポート>
</テンプレート>

オンライン体験

コードを表示

要約:

以上が、私たちに多くの利便性を提供してくれるteleportコンポーネントの基本的な使い方と拡張的な使い方です。これで、Vue3組み込みコンポーネントTeleportの詳細な使い方に関するこの記事は終わりです。Vue3組み込みコンポーネントTeleportの使い方に関するより関連性の高いコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を続けて閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3 での Teleport の使用に関する詳細な説明
  • Vue3 Teleportの実践と原理の詳細な説明
  • vue3のテレポート瞬間移動機能の使い方を詳しく解説
  • vue2 で vue3 のテレポートを実装する方法

<<:  スライドドアを実装するための CSS サンプルコード

>>:  dockerコンテナにviコマンドをインストールする簡単な操作

推薦する

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

Typora コードブロックのカラーマッチングとタイトルシリアル番号実装コード

効果: タイトルには独自のシリアル番号があり、コードブロックには配色があり、コードブロックの左上隅に...

Vue はトークンを取得してトークン ログインのサンプル コードを実装します

ログイン認証にトークンを使用する考え方は次のとおりです。 1. 初めてログインする場合、フロントエン...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

MySQL における explain の役割の詳細な説明

1. MYSQLインデックスインデックス: MySQL がデータを効率的に取得するのに役立つデータ構...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

Linuxファイルを表示するコマンドの詳細な説明

Linuxファイルを表示する方法ファイルの内容を表示するコマンド: catは最初の行からコンテンツを...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

Windows10にMySQL5.6.35データベースを2つインストールする

次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...

JSはリクエストディスパッチャーを実装する

目次抽象化と再利用シリアルセグメントシリアル、セグメントパラレル要約するはじめに: JS は当然並列...

MySQL 5.7.17 のインストールと設定方法のグラフィックチュートリアル (Win7 の場合)

Windows 7 で MySQL 5.7.17 をインストールする方法についてのグラフィック チ...

HTML テーブル マークアップ チュートリアル (48): CSS で変更されたテーブル

<br />では、CSS 構文を巧みに使用してテーブルを美しくする方法を見てみましょう。...

Axios を使用して Vue2 がリクエストを開始する詳細なプロセス記録

目次序文Axiosのインストールと設定シンプルなGETリクエストを開始するPOSTリクエストを行うシ...

Vue+Element UIはドロップダウンメニューのカプセル化を実現します

この記事の例では、ドロップダウンメニューのカプセル化を実装するためのVue + Element UI...