VUEで再利用可能なモーダルコンポーネントを構築する方法は?
再利用可能なVueモーダルボックスコンポーネントを作成し、最初にModal.vueをマスク層、タイトル、コンテンツ、ボトムスロットなど、ベースコンテナとして定義します。 2。スロットを使用して柔軟性を実現し、ヘッダー、デフォルト、フッタースロットを介してコンテンツをカスタマイズします。 3。ディスプレイを制御し、Vモデルを非表示にします:親コンポーネントのISOPENバインディングは、双方向通信を実現します。 4.オプションの拡張機能には、トランジションアニメーションの追加、ESCキークロージング、フォーカスロック、カスタマイズクラス名が含まれます。最後に、アプリケーション範囲全体に適した、再利用可能でカスタマイズ可能でアクセス可能なモーダルボックスコンポーネントを取得します。
VUEで再利用可能なモーダルコンポーネントを構築することは、アプリ全体でUIとロジックを複製することを避けるための実用的な方法です。よく構成されたモーダルは、アラート、フォーム、確認、または現在のビューの上に表示する必要があるコンテンツに使用できます。柔軟で清潔で、簡単に再利用できるものを作成する方法は次のとおりです。

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 'から{defineProps、defineEmits}をインポート const emit = defineemits(['update:isopen'、 'close']) const props = defineProps({ ISOPEN:{ タイプ:Boolean、 必須:true }、 タイトル: { タイプ:文字列、 デフォルト: '' }、 幅: { タイプ:文字列、 デフォルト: '500px' }、 closeonclickoutside:{ タイプ:Boolean、 デフォルト:true } }) const close =()=> { Emit( 'Update:Isopen'、False) エミット( 'close') } 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
、デフォルトbody
、 footer
)を使用するため、ベースロジックを変更せずにコンテンツをカスタマイズできます。

- デフォルトスロット:メインコンテンツ。
-
header
スロット:タイトル領域を交換または強化します。 -
footer
スロット:「キャンセル」や「保存」などのアクションボタンを追加します。
これにより、フォーム、確認、または情報ポップアップのモーダル作業が行われます。
3.親コンポーネントのモーダルを使用します
v-model
スタイルのバインディングでどこにでも使用します。

<! - 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> </テンプレート> <スクリプトのセットアップ> 'vue'から{ref}をインポート '@/components/modal.vue'からモーダルをインポートする const showmodal = ref(false) const name = ref( '') 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 === 'escase')close() } onmounted(()=> window.addeventlistener( 'keydown'、handleESC))) onunmounted(()=> window.removeeventlistener( 'keydown'、handleESC))
カスタムクラスのパス:
modalClass
プロップを追加して、内側のモーダルボックスを動的にスタイリングします。- アプリ全体で再利用可能
- スロット経由でカスタマイズ可能
-
v-model
を介して制御可能 - アクセスしやすくてきれい
最終メモ
このモーダルは次のとおりです。
必要に応じて、グローバルモーダル状態には、UIライブラリに抽出するか、Pinia/Vuexで使用できます。
基本的に、 isOpen
合格し、更新を聞いて、コンテンツをプラグインするだけです。それでおしまい。
以上がVUEで再利用可能なモーダルコンポーネントを構築する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

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

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

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

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

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

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

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

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を使用します
