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

推薦する

MySQL InnoDB 監視 (システム層、データベース層)

MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...

MySQL マスタースレーブレプリケーションの原理と注意点

前面に書かれた最近、Mycat で特別なトピックを書いています。最近、多くの友人が面接に出かけている...

2008 年の Web デザインにおける 10 の経験

<br />インターネットは絶えず変化しており、BusinessWeek.com は専門...

Linuxはnode.jsを完全に削除し、yumコマンドで再インストールします。

最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...

MySQLクエリトランザクション処理へのノード接続の実装

目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...

この構成ファイルの排他ロックに失敗したという VMware 仮想マシンのプロンプトの解決方法

VMware が異常シャットダウンした後、再起動すると「この構成ファイルを排他的にロックできませんで...

Linux (Ubuntu 18.04) に Anaconda をインストールする詳細な手順

Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

WeChatミニプログラムでトークンの有効期限を処理する方法

目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...

Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...

レム適応の一般的なパッケージ3つについて

序文以前、rem適応についての記事を書きましたが、具体的なパッケージは紹介しませんでした。今日は、よ...

Ubuntu 20.04 CUDA & cuDNN のインストール方法 (グラフィカル チュートリアル)

CUDA インストール cuda をダウンロードサポートされているcudaバージョンを表示するには...

MySQL 4 データをインポートする方法

1. mysqlコマンドをインポートするmysql コマンドのインポート構文は次のとおりです。 my...

HTML の title 属性を正しく使用するためのヒント

コンテンツを携帯電話、タブレット、支援技術のユーザーから非表示にし、キーボードのユーザーにのみ表示す...

インターフェース設計の10の一般的なルール

<br />これは私がずっと前に集めた記事です。皆さんの参考のために共有したいと思います...