目次
1.ベースモーダルコンポーネントを作成します
2.スロットを使用して、柔軟性を最大限に活用します
3.親コンポーネントのモーダルを使用します
4.オプションの拡張機能
最終メモ
ホームページ ウェブフロントエンド Vue.js VUEで再利用可能なモーダルコンポーネントを構築する方法は?

VUEで再利用可能なモーダルコンポーネントを構築する方法は?

Aug 03, 2025 am 07:15 AM

再利用可能なVueモーダルボックスコンポーネントを作成し、最初にModal.vueをマスク層、タイトル、コンテンツ、ボトムスロットなど、ベースコンテナとして定義します。 2。スロットを使用して柔軟性を実現し、ヘッダー、デフォルト、フッタースロットを介してコンテンツをカスタマイズします。 3。ディスプレイを制御し、Vモデルを非表示にします:親コンポーネントのISOPENバインディングは、双方向通信を実現します。 4.オプションの拡張機能には、トランジションアニメーションの追加、ESCキークロージング、フォーカスロック、カスタマイズクラス名が含まれます。最後に、アプリケーション範囲全体に適した、再利用可能でカスタマイズ可能でアクセス可能なモーダルボックスコンポーネントを取得します。

VUEで再利用可能なモーダルコンポーネントを構築する方法は?

VUEで再利用可能なモーダルコンポーネントを構築することは、アプリ全体でUIとロジックを複製することを避けるための実用的な方法です。よく構成されたモーダルは、アラート、フォーム、確認、または現在のビューの上に表示する必要があるコンテンツに使用できます。柔軟で清潔で、簡単に再利用できるものを作成する方法は次のとおりです。

VUEで再利用可能なモーダルコンポーネントを構築する方法は?

1.ベースモーダルコンポーネントを作成します

Modal.vueコンポーネントを作成することから始めます。これはあなたの再利用可能な容器になります。

 <! -  Components/Modal.vue->
<テンプレート>
  <div v-if = "isopen" class = "modal-overlay" @click = "handle overlayclick">
    <div class = "modal":style = "{width}" @click.stop>
      <! - ヘッダー - >
      <div v-if = "$ slots.header || title" class = "modal-header">
        <スロットname = "header">
          <h3> {{title}} </h3>
        </slot>
        <button @click = "close" class = "modal-close">&times; </button>
      </div>

      <! - ボディ - >
      <div class = "modal-body">
        <スロット />
      </div>

      <! - フッター - >
      <div v-if = "$ slots.footer" class = "modal-footer">
        <スロット名= "フッター" />
      </div>
    </div>
  </div>
</テンプレート>

<スクリプトのセットアップ>
{vue &#39;から{defineProps、defineEmits}をインポート

const emit = defineemits([&#39;update:isopen&#39;、 &#39;close&#39;])

const props = defineProps({
  ISOPEN:{
    タイプ:Boolean、
    必須:true
  }、
  タイトル: {
    タイプ:文字列、
    デフォルト: &#39;&#39;
  }、
  幅: {
    タイプ:文字列、
    デフォルト: &#39;500px&#39;
  }、
  closeonclickoutside:{
    タイプ:Boolean、
    デフォルト:true
  }
})

const close =()=> {
  Emit( &#39;Update:Isopen&#39;、False)
  エミット( &#39;close&#39;)
}

const handlelayclick =()=> {
  if(props.closeonclickoutside){
    近い()
  }
}
</script>

<スタイルスコープ>
.modal-overlay {
  位置:修正;
  上:0;
  左:0;
  幅:100%;
  高さ:100%;
  背景色:RGBA(0、0、0、0.5);
  ディスプレイ:Flex;
  justify-content:center;
  Align-Items:Center;
  z-index:1000;
}

.modal {
  背景:白。
  ボーダーラジウス:8px;
  Box-Shadow:0 4px 20px RGBA(0、0、0、0.2);
  Max-Height:90VH;
  Overflow-y:auto;
}

.modal-header {
  ディスプレイ:Flex;
  justify-content:space-bethed;
  Align-Items:Center;
  パディング:16px 24px;
  ボーダーボトム:1px solid #eee;
}

.Modal-Header H3 {
  マージン:0;
  フォントサイズ:1.25rem;
}

.Modal-Close {
  背景:なし;
  国境:なし;
  フォントサイズ:1.5rem;
  カーソル:ポインター;
  色:#999;
}

.Modal-Close:Hover {
  色:#333;
}

.modal-body {
  パディング:24px;
}

.modal-footer {
  パディング:16px 24px;
  ボーダートップ:1px solid #eee;
  テキストアライグ:右;
}
</style>

2.スロットを使用して、柔軟性を最大限に活用します

コンポーネントは、VUEの名前付きスロット( header 、デフォルトbodyfooter )を使用するため、ベースロジックを変更せずにコンテンツをカスタマイズできます。

VUEで再利用可能なモーダルコンポーネントを構築する方法は?
  • デフォルトスロット:メインコンテンツ。
  • headerスロット:タイトル領域を交換または強化します。
  • footerスロット:「キャンセル」や「保存」などのアクションボタンを追加します。

これにより、フォーム、確認、または情報ポップアップのモーダル作業が行われます。


3.親コンポーネントのモーダルを使用します

v-modelスタイルのバインディングでどこにでも使用します。

VUEで再利用可能なモーダルコンポーネントを構築する方法は?
 <! -  parentComponent.vue->
<テンプレート>
  <div>
    <button @click = "showmodal = true"> modalを開く</button>

    <Modal V-Model:Isopen = "ShowModal" Title = "ユーザーの詳細">
      <p>以下のユーザー情報を入力してください:</p>
      <入力v-model = "name" placeholder = "name" class = "input" />

      <テンプレート#footer>
        <button @click = "showmodal = false" class = "btn btn-secondary"> cancel </button>
        <ボタン @click = "save" class = "btn btn-primary"> save </button>
      </テンプレート>
    </modal>
  </div>
</テンプレート>

<スクリプトのセットアップ>
&#39;vue&#39;から{ref}をインポート
&#39;@/components/modal.vue&#39;からモーダルをインポートする

const showmodal = ref(false)
const name = ref( &#39;&#39;)

const save =()=> {
  アラート( `saved:$ {name.value}`)
  showmodal.value = false
}
</script>

これは、 v-model:isOpen update:isOpenイベントを使用します。


4.オプションの拡張機能

さらにモーダルを改善できます。

  • 遷移の追加:滑らかなフェードイン/アウトエフェクトのために、モーダルを<transition>でラップします。

     <トランジション名= "modal-fade">
      <div v-if = "isopen" class = "modal-overlay">
        <! - モーダルコンテンツ - >
      </div>
    </transition>
  • トラップフォーカス(アクセシビリティ):ディレクティブまたはライブラリを使用して、モーダル内でキーボードフォーカスをトラップします。

  • ESCキークローズonMountedにキーリスナーを追加します:

     const handleesc =(e)=> {
      if(e.key === &#39;escase&#39;)close()
    }
    onmounted(()=> window.addeventlistener( &#39;keydown&#39;、handleESC)))
    onunmounted(()=> window.removeeventlistener( &#39;keydown&#39;、handleESC))
  • カスタムクラスのパスmodalClassプロップを追加して、内側のモーダルボックスを動的にスタイリングします。


  • 最終メモ

    このモーダルは次のとおりです。

    • アプリ全体で再利用可能
    • スロット経由でカスタマイズ可能
    • v-modelを介して制御可能
    • アクセスしやすくてきれい

    必要に応じて、グローバルモーダル状態には、UIライブラリに抽出するか、Pinia/Vuexで使用できます。

    基本的に、 isOpen合格し、更新を聞いて、コンテンツをプラグインするだけです。それでおしまい。

    以上がVUEで再利用可能なモーダルコンポーネントを構築する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Vue Futide Product Resources Webサイトへの無料入場。完全なVUE完成品は、オンラインで永久に表示されます Vue Futide Product Resources Webサイトへの無料入場。完全なVUE完成品は、オンラインで永久に表示されます Jul 23, 2025 pm 12:39 PM

この記事では、VUE開発者と学習者向けの一連のトップレベルの完成品リソースWebサイトを選択しました。これらのプラットフォームを通じて、大規模な高品質のVUE完全プロジェクトを無料でオンラインで閲覧、学習、再利用することさえできます。

Vue Lifecycleフックとは何ですか?いくつか名前を付けて、それらのユースケースを説明してください。 Vue Lifecycleフックとは何ですか?いくつか名前を付けて、それらのユースケースを説明してください。 Jul 24, 2025 am 12:08 AM

VUEコンポーネントのライフサイクルフックは、特定の段階でコードを実行するために使用されます。 1.作成:データの初期化に適したコンポーネントが作成された直後に呼び出されます。 2.マウント:コンポーネントがDOMに取り付けられた後に呼び出され、DOMの操作または外部リソースのロードに適しています。 3.投資:データの更新により、コンポーネントが再レンダリングされ、データの変更への応答に適した場合に呼び出されます。 4.beforeunmount:コンポーネントがアンインストールされる前に呼び出され、イベントのリスニングやタイマーに適しており、メモリの漏れを防ぎます。これらのフックは、開発者がコンポーネントの動作を正確に制御し、パフォーマンスを最適化するのに役立ちます。

Vueのページネーションコンポーネントの例 Vueのページネーションコンポーネントの例 Jul 26, 2025 am 08:49 AM

再利用可能なVUEページングコンポーネントを実装するには、次のキーポイントを明確にする必要があります。1。総数、1ページあたりの行数、現在のページ番号を含む小道具を定義します。 2。ページの総数を計算します。 3.表示されているページ番号アレイを動的に生成します。 4.ページ番号を処理して、イベントをクリックし、親コンポーネントに渡します。 5.スタイルとインタラクションの詳細を追加します。プロップを介してデータを受信し、デフォルト値を設定し、計算された属性を使用してページの総数を計算し、メソッドを使用して現在表示されているページ番号アレイを生成し、テンプレートでボタンをレンダリングし、クリックイベントをクリックして[現在ページイベントをトリガーし、親コンポーネントのイベントを聞いて、現在のページ番号を更新して、CSSのステータスを改善します。

Vue無料完成品リソース入りVUE無料完成品Webサイトナビゲーション Vue無料完成品リソース入りVUE無料完成品Webサイトナビゲーション Jul 23, 2025 pm 12:42 PM

VUE開発者にとって、高品質の完成プロジェクトまたはテンプレートは、新しいプロジェクトを迅速に開始し、ベストプラクティスを学ぶための強力なツールです。この記事では、バックエンド管理システム、UIコンポーネントライブラリ、または特定のビジネスシナリオのテンプレートであろうと、効率的に必要なフロントエンドソリューションを見つけるのに役立つ複数のトップVUE無料完成品リソースポータルとWebサイトナビゲーションを選択して、簡単に入手できます。

$ refコンパイラマクロの使用方法は? $ refコンパイラマクロの使用方法は? Jul 19, 2025 am 01:27 AM

$ REFは、JSONSCHEMAおよびOpenAPI仕様で一般的に見られるJSONまたはYAML構成ファイルまたは外部ファイル構造の他の部分を参照するために使用されるキーワードです。 1。$ refの基本的な構文は{"$ ref": "path"}であり、現在のドキュメント(#/definitions/userなど)または外部ファイル(userschema.json#/definitions/userなど)の内部を指すことができます。 2。使用法のシナリオには、スキーマの再利用、大きなファイルの分割、コード構造の整理が含まれます。 3.パスは正しいことであり、円形の参照を避け、外部ファイルがアクセス可能であることを確認し、過度のネストを避ける必要があることに注意してください。

VUEの計算されたプロパティとメソッド VUEの計算されたプロパティとメソッド Aug 05, 2025 am 05:21 AM

計算にはキャッシュがあり、依存関係が変更されないままである場合、複数のアクセスは再計算されませんが、メソッドは呼び出されるたびに実行されます。 2.Computedは、応答性データに基づく計算に適しています。メソッドは、パラメーターが必要または頻繁に呼び出されるが、結果は応答性データに依存しないシナリオに適しています。 3.データの双方向の同期を実現することができますが、メソッドはサポートされていません。 4.要約:最初に計算されたコンピューターを使用してパフォーマンスを改善し、パラメーターを渡したり、操作を実行したり、キャッシュを回避したりするときにメソッドを使用します。

Vueコンポーネントでスロットと名前付きスロットを使用する方法は? Vueコンポーネントでスロットと名前付きスロットを使用する方法は? Jul 21, 2025 am 03:24 AM

VUEでスロットと名前付きスロットを使用すると、コンポーネントの柔軟性と再利用性が向上します。 1.スロットを使用すると、親コンポーネントは、段落テキストをcard.vueコンポーネントに挿入するなど、タグを介して子コンポーネントにコンテンツを挿入できます。 2。名前付きスロットは、モーダルボックスコンポーネントでそれぞれヘッダー、ボディ、フッター領域を定義するなど、名前属性を介したコンテンツ挿入位置の制御を実現します。 3.デフォルトのコンテンツは、デフォルトの閉じるボタンなど、親コンポーネントが提供されていない場合、代替としてスロットに設定できます。 4。#シンボルは、v-slotの略語構文です。 5.過度の依存性を避けるために合理的にスロットを使用することをお勧めします。一部のコンテンツは、プロップまたはスコープコンポーネントを介して実装されると見なすことができます。

VUEアプリにInternationalization(I18N)を実装する方法は? VUEアプリにInternationalization(I18N)を実装する方法は? Jul 26, 2025 am 08:37 AM

vuei18nをインストール:Vue3はnpminstallvue-i18n@nextを使用します。vue2はnpminstallvue-i18nを使用します。 2.ネストされた構造をサポートし、en.jsonやes.jsonなどの言語ファイルを作成します。 3. vue3のcreatei18nを介してインスタンスを作成し、main.jsにマウントし、vue2はvue.use(vuei18n)を使用し、vuei18nをインスタンス化します。 4。{{$ t( 'key')}}補間をテンプレートに挿入し、vue3Composition APIで使用するusei18nのt関数、およびvue2options apiを使用します

See all articles