【Vuejs】簡単なTodoアプリを開発する
スポンサードリンク
おはようございます。Shotaです。
今回の記事では、Vueを使って非常に簡単なTodoアプリを開発するための方法を徹底解説していきます。
要件定義
- 投稿内容を作成、削除する
- チェックボックスを付ける
- 作成ボタンを付ける
基本設定
まずは、以下のプログラムをコピペしてHTMLとVueを連携する準備をする。
▼HTMLファイル
<html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://unpkg.com/vue@next"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <h1>ProtoTyping</h1> <hr> <div id="todo-list-sample"> </div> <script src="main.js"></script> </body> </html>
▼JavaScriptファイル
const app = Vue.createApp({ data() { return { } }, methods: { }, }) app.mount('#todo-list-sample')
これでHTMLファイルとJavaScriptファイルを連携する準備は整った。
Form作成
次に、HTMLでTodoアプリのタスクを作成するためのタスクを作成するFormを作成する
<div id="todo-list-sample"> <form> <input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat" /> <button>Add</button> </form> </div>
入力フォームの内容とJavaScriptファイルを連携させるために以下の内容を記述する
const app = Vue.createApp({ data() { return { newTodoText: '', todos: [ { id: 1, title: 'Do the dishes' }, { id: 2, title: 'Take out the trash' }, { id: 3, title: 'Mow the lawn' }, ], } }, methods: { }, }) app.mount('#todo-list-sample')
上記のプログラムに記したtodos
は投稿した内容を箇条書きにしてHTMLファイルに反映させるためである。
タスク作成の実装
次に、HTMLで作成したFormとJavaScriptを連携させるために、form
タグに以下の内容を記述する。
<form v-on:submit.prevent="addNewTodo"> <label for="new-todo">Add a Todo</label> <input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat" /> <button>Add</button> </form>
上記のHTMLプログラムのform
タグにVuejsのv-on
ディレクティブを適用させることでブラウザで入力したデータをJavaScriptファイルに反映できる。データを作成するので、v-on
属性はsubmit.prevent
を付ける。
v-on:submit.prevent
の後ろに=
で書かれているaddNewTodo
はTodoタスクを新規作成するための関数である。
以下のようにして関数addNewTodo
の処理を実装する。
const app = Vue.createApp({ data() { return { newTodoText: '', todos: [ { id: 1, title: 'Do the dishes' }, { id: 2, title: 'Take out the trash' }, { id: 3, title: 'Mow the lawn' }, ], nextTodoId: 4 } }, // 追加 methods: { addNewTodo() { this.todos.push({ id: this.nextTodoId++, title: this.newTodoText }) this.newTodoText = '' } }, }) app.mount('#todo-list-sample')
変数todos
を見ると、id
とtitle
という2つの変数がある。新しくタスクを作成するには、タスクの数―id
の値を増やしていかなければいけないので、新しくnextTodoId
を用意してtodos
にあるタスクの数に1を足した値を代入する。
これでタスクを追加する機能を実装できた。
タスクの一覧を表示する・削除する
次に、JavaScriptファイルに書かれている変数todos
のデータを反映させるために以下のプログラムを記述する
<div id="todo-list-example"> <form v-on:submit.prevent="addNewTodo"> <label for="new-todo">Add a todo</label> <input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat" /> <button>Add</button> </form> <!---追加-> <ul> <todo-item v-for="(todo, index) in todos" :key="todo.id" :title="todo.title" @remove="todos.splice(index, 1)" ></todo-item> </ul> </div>
v-for
ディレクティブを活用してJavaScripファイルに記されているtodos
のデータを一つずつtodo
に格納して出力する。
しかし、当然todo-item
要素はHTML内にはないので、Vuejsの方で予め定義しておく必要がある
const app = Vue.createApp({ data() { return { newTodoText: '', todos: [ { id: 1, title: 'Do the dishes' }, { id: 2, title: 'Take out the trash' }, { id: 3, title: 'Mow the lawn' }, ], nextTodoId: 4 } }, methods: { addNewTodo() { this.todos.push({ id: this.nextTodoId++, title: this.newTodoText }) this.newTodoText = '' } }, }) app.component('todo-item', { template: ` <li> {{ title }} <button @click="$emit('remove')">Remove</button> </li> `, props: ['title'], emits: ['remove'], }) app.mount('#todo-list-sample')
▼追記したプログラム
app.component('todo-item', { template: ` <li> {{ title }} <button @click="$emit('remove')">Remove</button> </li> `, props: ['title'], emits: ['remove'], })
上記のプログラムで、Vueアプリケーションの定数app
のメソッドcomponent
で第一引数にtodo-item
を用意し、第二引数に第一引数で用意したtodo-item
のテンプレートを用意する。
このような処理を経て、HTMLにtodo-item
の要素をオリジナルで作成できる。
▼追加したHTMLファイル
<ul> <todo-item v-for="(todo, index) in todos" :key="todo.id" :title="todo.title" @remove="todos.splice(index, 1)" ></todo-item> </ul>
作成したtodo-item
要素に以下の要素を作成する。
v-for
ディレクティブでtodos
からtodo
を抽出する。その際に、変数index
でid
をきちんと指定v-bind
ディレクティブでkey
属性でid
を指定し、title
属性でtitle
v-on
ディレクティブでリストtodos
のメソッドsplice
で対象のタスクを削除するボタン
これで非常に簡単なTodoアプリを作成できる。
完成形
▼HTMLファイル
<div id="todo-list-example"> <form v-on:submit.prevent="addNewTodo"> <label for="new-todo">Add a todo</label> <input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat" /> <button>Add</button> </form> <ul> <todo-item v-for="(todo, index) in todos" :key="todo.id" :title="todo.title" @remove="todos.splice(index, 1)" ></todo-item> </ul> </div>
▼JavaScriptファイル
const app = Vue.createApp({ data() { return { newTodoText: '', todos: [ { id: 1, title: 'Do the dishes' }, { id: 2, title: 'Take out the trash' }, { id: 3, title: 'Mow the lawn' } ], nextTodoId: 4 } }, methods: { addNewTodo() { this.todos.push({ id: this.nextTodoId++, title: this.newTodoText }) this.newTodoText = '' } } }) app.component('todo-item', { template: ` <li> {{ title }} <button @click="$emit('remove')">Remove</button> </li> `, props: ['title'], emits: ['remove'] }) app.mount('#todo-list-example')
まとめ
今回の記事では、Vuejsで簡単なTodoアプリを開発する方法を徹底解説しました。
今回の記事を参考に、Vuejsについての理解を深めていただければ幸いです。今回の記事はこれで終了です。