これでわかるvue.jsでシングルページアプリケーションの作成方法

本文書ではVue.jsを使いシングルページアプリケーションの作成を行ったことがない入門者を対象にしています。プロジェクトを作成することなしで1つのファイル(index.html)とCDNを利用してデータ作成/取得/更新/削除処理 (CRUD)が行えるシングルページアプリケーションの作成方法の説明をおこなっています。
本文書で利用しているVueのバージョンは2.7です。
vue.jsのほかモーダルウィンドウを実現するためにvue-js-modalライブラリを利用しています。vue-js-modalがVueのバージョン3をサポートしていない場合はvue-final-modalなどVueのバージョン3に対応しているライブラリを利用してください。
目次
作成するアプリケーションの画面
本文書を使って作成する最終的なシングルページアプリケーションは下記となります。
【ユーザ一覧画面】
ユーザ3名分の情報が表示される初期画面

【モーダルウィンドウによるユーザ登録画面】
ユーザ登録画面をクリックするとモーダルウィンドウが表示

【モーダルウィンドウによるユーザ更新画面】
各ユーザ行にある更新ボタンを押すとモーダルウィンドウが表示

【ユーザ削除後の画面】
ID4のユーザを登録後、削除ボタンをクリックすることでID2,3のユーザ情報を削除しています。


初期画面の作成
データ作成/更新/削除の機能を追加する前にvue.jsとbootstrapを使って初期画面の作成を行います。通常は外部との連携を通してデータの取得を行いますが、今回は初期データを設定した状態から開始します。

コードの中身はデータプロパティusersにライフサイクルフックのcreatedで3名のユーザ情報を登録し、v-forディレクティブを使って3名のユーザ情報をテーブルの行に展開を行っているだけのシンプルなものです。
作成したindex.htmlファイルをブラウザで確認するとユーザ一覧画面が表示されます。

データ作成機能追加
最初にユーザ登録の機能を追加します。ユーザの登録はモーダルウィンドウで行えるようにvue-js-modalライブラリを使用します。
vue-js-modalライブラリの設定
vue-js-modalはcdnを利用して使います。vue.jsのcdnの下に追加します。
vue-js-modalを使用するためにVue.useの設定を行います。new Vueの行の上に追加します。
モーダルウィンドウの設定
新たにユーザ登録ボタンを追加しボタンをクリックするとモーダルウィンドウが表示される設定を行います。
clickイベントはまだ設定していませんが、h1タグの下にユーザ登録ボタンを追加します。このボタンをクリックするとモーダルウィンドウが表示されます。クリックイベントにはshowModalを指定しています。
次にモーダルウィンドウで表示させる内容のmodalタグを追加します。modalタグは、<div id=”app”></div>タグの内部に追加する必要があります。ここでは <div id=”app”> の閉じタグ</div>の前に追加しています。modalを識別するためにnameはuser-modalを指定しています。
モーダルウィンドウが表示させるためにクリックイベントで指定したshowModalメソッドを追加します。showの引数にはmodalタグで指定したnameのuser-modalを設定します。
モーダルウィンドウを表示させる設定は完了したので、ブラウザで動作確認を行います。ユーザ登録ボタンをクリックしてモーダルウィンドウが表示が確認してください。

モーダルウィンドウの外側をクリックするとモーダルウィンドウが閉じられることも確認してください。

ユーザ登録フォームの追加
追加したモーダルウィンドウ上でユーザの登録に必要なフォームを表示させます。
まず、Vueインスタンスにユーザ登録に必要なデータプロパティformを追加します。
modalタグの中身をh2タグの文字列から入力フォームに変更します。各input要素はv-modalを利用してデータバインディングを行っています。v-modalでバインディングするのは先程追加したデータプロパティのformの各プロパティです。
フォームを追加したので再度ユーザ登録ボタンをクリックするとモーダルウィンドウにはユーザ登録のためのフォームが表示されます。

登録ボタンが表示されていますが登録ボタンをクリックしても何も起こりません。次は登録ボタンを押したあとの処理を追加します。
ユーザ登録処理の追加
入力フォームの登録ボタンにクリックイベントを追加して、ユーザ登録を行うメソッドregisterUserを追加します。
VueインスタンスのmethodsにregisterUserメソッドを追加します。registerUserメソッドの中では、入力した値からuserオブジェクトを作成して、配列のpushメソッドを使って配列usersの一番後ろに作成したuserオブジェクトを追加します。追加が完了するとthis.$modal.hideで表示しているモーダルウィンドウを非表示にします。
ブラウザを利用して、ユーザ登録を行います。登録ボタンを押した後に入力したユーザが追加されるか確認を行ってください。ID4のJohn Doeユーザを追加しています。

登録ボタンを押して登録したユーザ情報は自動でテーブルの最後に追加され、表示されます。ページのリロードは必要ありません。
入力した値のリセット
再度ユーザ登録ボタンを押すと先ほど入力した値がそのまま入力されたままの状態となります。

入力した値をリセットする処理resetFormメソッドを追加します。
ユーザ登録後に再度ユーザ登録のモーダルウィンドウを開いても登録が終わった値は表示されません。
データ削除機能
ユーザ情報削除処理の追加
ユーザ情報を削除ボタンを使って1行ずつ削除する機能を追加します。削除ボタンにクリックイベントを追加し、deleteUserメソッドを設定します。
deleteUserの引数にはuserの情報を渡します。VueインスタンスのmethodsにdeleteUserメソッドを追加します。indexOfメソッドを使って削除を行ったユーザの配列の番号を取得し、spliceメソッドを使ってindex番目の要素1つを配列から削除しています。

ブラウザを使って削除ボタンを押すとユーザ情報が削除できるか確認を行います。ID2, ID3の行にある削除ボタンをクリックしてユーザを削除します。


データ更新処理
ユーザ情報更新処理の追加
登録済みのユーザ情報を更新する機能を追加します。ユーザ登録と同様に更新ボタンをクリックするとモーダルウィンドウが表示され、その中の入力フォームでユーザ情報の更新を行います。
更新ボタンにクリックイベントを追加し、editUserメソッドを設定します。
editUserの引数にはuserの情報を渡します。VueインスタンスのmothodsにeditUserメソッドを追加します。editUserの中では、indexOfメソッドを使って更新を行うユーザの配列の番号を取得します。配列の番号は更新時に必要になるので、データプロパティeditIndexを追加します。
追加するeditUserメソッドの中では更新を行いたいユーザ情報(引数から取得したuser)をデータプロパティthis.formに挿入し、ユーザ登録に利用したuser-modalをユーザ更新でも再利用するためにthis.$modal.show(‘user-modal’)を実行します。
更新ボタンをクリックするとモーダルウィンドウにはユーザ情報が入った状態で表示されますが、タイトルはユーザ登録、ボタンは登録ボタンになっているので変更が必要になります。

新たにデータプロパティcreateFlagとv-ifディレクティブを使ってモーダルウィンドウ内の登録と更新で表示される内容を切り替えます。createFlagの初期値はtrueに設定します。
editUserメソッドの中でcreateFlagをfalseにします。
更新ボタンを押すとタイトルがユーザ登録からユーザ更新、登録ボタンから更新ボタンになっていることを確認します。

しかし、更新ボタンを押した後にモーダルウィンドウの外側をクリックし、モーダルウィンドウを閉じたあとにユーザ登録ボタンを押すと更新のままになっており、先ほど更新ボタンを押したユーザ情報が表示されます。
ユーザ登録ボタンをクリックしたあとに実行されるshowModalメソッドでcreateFlagをtrueに設定し、フォームに表示されているユーザ情報をクリアできるようにresetFormメソッドを追加します。
これで更新ユーザ情報が表示される問題は解消されます。
ユーザ情報の更新反映処理の設定
最後にモーダルウィンドウ上で行ったユーザ情報の更新を保存するためにVueインスタンスのmethodsにupdateUserメソッドを追加します。updateUserメソッドは更新ボタンを追加した時にクリックイベントで指定されているメソッドです。
this.editIndexはeditUserメソッド実行時に取得した配列の番号です。
IDは2のユーザの更新ボタンをクリックして、Nameを変更し、更新ボタンを押してください。

即座にユーザ一覧に表示されている情報が更新されていることを確認してください。

更新、追加、削除を行っても正常に処理が行えることを確認してください。
vue.jsを使って1つのファイル(index.html)でデータ作成/取得/更新/削除処理 (CRUD)が行えるシングルページアプリケーションを作成することができました。