#モーダルとは
モーダルは、ボタンを押したときに一度確認するウインドウのことです。
ダイアログも同じ意味のようですが、若干違いがあるようです。
#モーダルとダイアログの違い
ダイアログは警告や確認のメッセージウインドウのこと。
モーダルはダイアログの一種だけれども、そのウインドウを処理しないと先に進めないもの。
つまりダイアログのモーダルではないものは警告だけで、OKを押せばページが切り替わるけど、キャンセルを押しても問題ないようなメッセージが想定できる。
#一覧画面の削除方法
なぜ、一覧画面からの削除をわざわざ書いているかというと、一覧画面のモーダルに削除対象の情報を送るのに一手間必要だから。
例えば、投稿一覧画面にPostが並んでいるとする。
そのPostに削除ボタンをつければそのまま削除できるのだが、
一度モーダルを表示させると、モーダルはどのPostから来た情報なのかがわからないみたい。
これが編集画面だと、URLにIDあるしすでに変数にPostが渡されているから理解してくれる。
##どうやって理解させようか
これなんだが、一度JSで取得してからモーダルに渡すことで解消する。
<button type="button" data-toggle="modal" data-target="#modal_delete" data-title="{{ $post->id }}" data-url="post/index">削除</button>
<div class="modal" tabindex="-1" role="dialog" id="modal_delete">
<form role="form" class="form-inline" method="POST" action="">
{{ csrf_field() }}
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<p></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">キャンセル</button>
<button type="submit" class="btn btn-danger">削除</button>
</div>
</div>
</div>
</form>
</div>
<script>
$('#modal_delete').on('shown.bs.modal', function (event) {
var button = $(event.relatedTarget);
var title = button.data('title');
var url = button.data('url');
var modal = $(this);
modal.find('.modal-body p').eq(0).text(title);
modal.find('form').attr('action',url);
});
</script>
全て1つのファイルへ書き込んでいるとします。
post.index1.blade.phpでボタンをクリックして、#modal-deleteを探します。
post.index3.blade.phpでJS用のデータに変換します。
post.index2.blade.phpでモーダルを表示し、必要なデータを取り込みます。
という流れです。
これで一覧画面でも個別のデータを受け渡すことが可能です。