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コマンドをインストールする簡単な操作

推薦する

Mac での MySql の詳細なインストールと構成

1.ダウンロードしてインストールする公式ウェブサイトからコミュニティ エディションの dmg インス...

スタイリッシュなウェブページデザインを作成する方法(グラフィックチュートリアル)

「壮大」という言葉は、おそらく現代のデザイナーが最も聞きたくない言葉でしょう。デザイナー:「デザイン...

JSでHTML本文のスタイルを変更する

目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...

Nginx ログ管理の概要

Nginx ログの説明アクセス ログを通じて、ユーザーの地理的起源、ジャンプ元、使用端末、特定の U...

HTMLタグと基本要素の学習のまとめ

1. HTML の要素とタグ<br />要素は、1 つのタグまたは 1 組のタグによって...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

Dockerコンテナの状態変換の実装

Dockerコンテナの状態遷移図2度目の実戦 [root@localhost ~]# docker ...

MySQL でインデックスとして B+Tree を使用する利点は何ですか?

目次データベースにインデックスが必要なのはなぜですか?インデックスが B+Tree データ構造を使用...

HTML 内の input type="reset" タグが無効 (機能しない) である理由として考えられるもの。

<html:reset> タグを使用すると、リセット ボタンが無効になり、ボタンをクリッ...

Django プロジェクトを作成して MySQL に接続する方法

1: django-admin.py startproject プロジェクト名2: cd プロジェク...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

MySQLクエリで大文字と小文字を区別しない問題を解決する方法

質問最近、SSH フレームワークを使用して実用的なプロジェクトを完了していたときに、長い間悩まされて...

CSS を使用して 3 列のアダプティブ レイアウト (両側は固定幅、中央はアダプティブ) を実現します。

いわゆる 3 列適応レイアウトとは、両側の幅が固定され、中央のブロックの幅が適応されることを意味しま...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...