2020
04/25

Vue.jsとBootstrapで多重に開けて簡潔に管理できるモーダルをつくる

Vue.jsとBootstrapを使った仕事でモーダルを使うことになったのですが、ベタに書いていると手に負えなくなってしまいそうだったのでいい感じに扱う方法を考えました。

DEMO

ADs

要件

・モーダルのコンテンツ部分を個別のコンポーネントにし、簡潔に管理できるようにする
・モーダルの中からもう1枚モーダルを開く場面もある

上記要件を達成するには、まずモーダルの外側を一つのコンポーネントとし、コンテンツ部分を個別のコンポーネントとして動的に読み込むようにします。

つまり以下のような構成にします。

DEMOでは2つのモーダルコンテンツを順繰りに読み込んでいますので、すべてが個別のモーダルとして開かれ無限ループとなります。

やっていく

よく使う処理なので関数部分をmain.jsに書き、どのコンポーネントからでも呼べるようにします。

main.js

openModal関数の引数としてモーダルのコンテンツ用コンポーネントとサイズを指定し、それをpropsとしてモーダル外側コンポーネントに渡します。

modalOuter.vue

モーダルの外側コンポーネント(ここではmodalOuter.vueとしている)はpropsでコンテンツ用コンポーネントとサイズを受け取るだけで、コンテンツ部分をcomponentタグで動的に読み込むようにします。

呼び出し方

あとはopenModal関数をaやbuttonタグにv-on:clickで設定します。

modalContents.vueは以下のようにコンテンツ部分を抜き出したものです。
必要に応じてmethodsやdataなどの処理を追加します。
コンポーネントとして独立しているため、個別の管理が可能です。

コード全文を公開していますので、参考になれば幸いです。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。