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

推薦する

コンピュータが予期せずシャットダウンした後、VMware で Linux がインターネットに接続できない問題の解決策

問題の説明: Linux システムのネットワーク カード ファイル /etc/sysconfig/n...

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...

HTMLフォーム入力監視の詳細な理解

今日、入力イベントに関するブログ投稿を見て、気まぐれで関連情報を整理してみました。イベント:関数 c...

Dockerfile における ENTRYPOINT と CMD の違い

Docker システムの学習チュートリアルでは、Dockerfile を使用して Docker イメ...

Ubuntuにopencvをインストールする正しい方法の詳細な説明

この記事ではUbuntuでC++インターフェースを使用してopencvをインストールする方法について...

Vue v-model 関連の知識のまとめ

​v-model は、入力とフォーム データ間、または 2 つのコンポーネント間の双方向データ バイ...

Select はダブルクリック dbclick イベントをサポートしていません

XML/HTML コードコンテンツをクリップボードにコピー< div クラス= "c...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

Xiaomi公式サイトの登録・ログイン機能を模倣するJavaScript

目次まずページレイアウトを構築する必要がありますJS関数1 JS関数2 JS関数3 JS関数4効果図...

mysql-8.0.11-winx64.zip の詳細なインストール チュートリアル

zip インストール パッケージをダウンロードします。 MySQL8.0 For Windows z...

JavaScript の querySelector メソッドと getElementById メソッドの違いを分析する

目次1. 概要1.1 querySelector() と querySelectorAll() の使...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

Nginx の負荷分散と動的および静的分離の原理と構成

目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 2

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...

時間範囲効果を実現するためのJavaScript

この記事では、時間範囲効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...