Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

1. テレポート

テレポート公式ドキュメント

1.1 テレポートの紹介

1. Vue は、UI と関連する動作をコンポーネントにカプセル化することで UI を構築することを推奨します。これらを互いにネストして、アプリケーションの UI を構成するツリーを構築できます。

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

上記はわかりにくいように見えますか? これは、公式文書から翻訳したものです。

実際、Teleport は Vue アプリの外部にコンポーネントをマウントするものだと私は理解しています。ご存知のとおり、Vue は SPA (シングル ページ) アプリケーションです。すべてのレンダリングは、ID が app のタグ内で行われます。この場合、app と同じレベルでコンポーネントを作成し、teleport タグを介して参照して、どのページでも使用できるようにします。

1.2 テレポートの使用

1. ここでグローバルモーダルボックスも実装します

2. 親子コンポーネント通信メカニズムを介してテレポートマウント機能を使用する

<!DOCTYPE html>
<html lang="ja">
  <ヘッド>
    <メタ文字セット="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" />
    <title>Vite アプリ</title>
  </head>
  <本文>
    <div id="アプリ"></div>
    <div id="modal"></div> <!-- アプリと同じレベルでタグモーダルを定義します -->
    <script type="module" src="/src/main.ts"></script>
  </本文>
</html>

モーダルコンポーネントを定義する

<テンプレート>
	<!-- teleport には to 属性があり、id が modal のタグに付加されています -->
    <テレポート先="#modal">
        <div id="center" v-if="isOpen">
            <div class="modal-header" v-if="title">
                <h2>{{ タイトル }}</h2>
                <時間 />
            </div>
            <div class="modal-content">
                <!-- 外部コンテンツの挿入をサポートするためにスロットを使用します -->
                <スロット></スロット>
            </div>
            <button @click="buttonClick">閉じる</button>
        </div>
    </テレポート>
</テンプレート>
<script lang="ts">
// defineProps<{ msg: string }>() Vue3 セットアップはプロパティを定義します
'vue' から defineComponent をインポートします。
エクスポートデフォルトdefineComponent({
    小道具: {
        isOpen: ブール値、
        タイトル: 文字列
    },
    // 出力を検証: {
        'クローズモーダル': null
        // (ペイロード: 任意) => {
        // payload.type === 'close' を返す
        // }
    },
    セットアップ(プロパティ、コンテキスト) {
        const ボタンクリック = () => {
            context.emit('モーダルを閉じる');
        }
        戻る {
            ボタンクリック
        }
    }
});
</スクリプト>
<スタイル>
#中心 {
    幅: 200ピクセル;
    高さ: 200px;
    境界線: 2px 黒一色;
    背景色: 白;
    位置: 固定;
    左: 50%;
    上位: 50%;
    変換: translate(-50%, -50%);
}
</スタイル>

3. モーダルコンポーネントを使用する

<スクリプト設定 lang="ts">
'vue' から { ref } をインポートします。
'./components/Modal.vue' から Modal をインポートします。
const modalTitle = ref('Hello, World');
modalIsOpen を ref(false) に設定します。
定数オープンモーダル = () => {
  modalIsOpen.値 = true;
}
定数onModalClose = () => {
  modalIsOpen.値 = false;
}
</スクリプト>
<テンプレート>
  <img alt="Vue ロゴ" src="./assets/logo.png" />
  <div class="test-useURLLoader">
    <button @click="openModal">モーダル</button>
    <モーダル:title="modalTitle" :isOpen="modalIsOpen" @close-modal="onModalClose">
      私のモデル
    </モーダル>
  </div>
</テンプレート>
<スタイル>
#アプリ {
  フォントファミリー: Avenir、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

1.3 プレビュー効果

画像の説明を追加してください

2. サスペンス

サスペンス公式ドキュメント

Waring : Vue3 の実験的な機能であるため、いつでも変更される可能性があるため、実稼働環境での使用は推奨されません。

2.1 サスペンスの紹介

非同期データに使用できます。さまざまな状況に適応するためのローカル処理方法があり、2つの選択肢(読み込み完了と失敗のスロット)を提供します。

より詳しい情報は、公式ドキュメントを自分で読んでみてください。ここではその中からいくつか抜粋しました。

2.2 サスペンスの使用

1. 非同期効果を実現するために、Promise を使用して非同期操作を実装できます。

2. 次のコンポーネントAsyncShow.vueコンポーネントを定義します。

<テンプレート>
	<!-- データを表示するには 3 秒待ちます -->
    <h1>{{ 結果 }}</h1>
</テンプレート>
<script lang="ts">
'vue' から defineComponent をインポートします。
エクスポートデフォルトdefineComponent({
    設定() {
        新しいPromise((resolve) => {を返す
            タイムアウトを設定する(() => {
                解決を返す({
                    結果: 43
                })
            }, 3000);
        });
    }
});
</スクリプト>
<スタイル>
</スタイル>

3. App.vueでこのコンポーネントを使用する

<スクリプト設定 lang="ts">
'./components/AsyncShow.vue' から AsyncShow をインポートします。
</スクリプト>
<テンプレート>
  <img alt="Vue ロゴ" src="./assets/logo.png" />
  <div class="test-useURLLoader">
    <!-- Promise が完了していない場合は、Loding... と表示されます。Promise が完了すると、値が表示されます -->
    <サスペンス>
      <テンプレート #デフォルト>
        <非同期表示 />
      </テンプレート>
      <テンプレート #フォールバック>
        <h2>
          読み込み中...
        </h2>
      </テンプレート>
    </サスペンス>
  </div>
</テンプレート>
<スタイル>
#アプリ {
  フォントファミリー: Avenir、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

2.3 プレビュー効果

画像の説明を追加してください

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueでコンポーネントを動的に作成する2つの方法
  • Vueコンポーネントを作成する3つの方法のまとめ
  • Vueコンポーネントの作成と公開方法の詳細な説明
  • Vueコンポーネントで値を作成して渡す方法
  • Vueコンポーネントの作成方法と使用方法を説明する記事

<<:  カルーセルバナーの自動回転効果を実現する純粋な CSS

>>:  MySQL テーブルスペースのリカバリに対する正しいアプローチについての簡単な説明

推薦する

入力タイプ=テキスト値=str を使用するための不完全なソリューション

今日、非常に奇妙な問題に遭遇しました。次のコードを見てください。 SimpleDateFormat ...

HTMLの基本概念の詳細な説明

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

MySql のグループ化と各グループからランダムに 1 つのデータを取得する

アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...

nginx がどのようにして高いパフォーマンスとスケーラビリティを実現するのかを深く理解する

NGINX の全体的なアーキテクチャは、連携して動作する一連のプロセスによって特徴付けられます。メイ...

Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

目次1. 監視Linuxホストを追加する2. メールボックスを設定する1. 監視Linuxホストを追...

LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します

目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...

Vue で webSocket を使用してリアルタイムの天気を更新する方法

目次序文webSocket の操作と例について:ウェブソケット1. webSocketについて2. ...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...

HTMLページのネイティブVIDEOタグはダウンロードボタン機能を隠します

Web プロジェクトを作成しているときに、紹介ビデオが別にある紹介ページに遭遇しました。この短いビデ...

HTML CSS に基づく検索アイコン付き検索ボックス機能を実装する

序文フロントエンドで非常に便利な、小さなアイコン付きの検索ボックスを作成する方法をご紹介します。エフ...

Windows に MySQL をインストールする方法のグラフィック チュートリアル

概要: この記事では主に、Windows 環境に MySQL をインストールする方法について説明しま...

Vue の計算プロパティ

目次1. 基本的な例2. 計算プロパティキャッシュとメソッド3. 計算プロパティセッター序文:通常、...

良いと思う国内のデザインサイトをいくつか選んでみました。

<br />私が良いと思った国内のデザインサイトをまとめてみました。広告ではありません!...