はじめに
Vue.jsを学習し始めて2週間ほど経ったのでTodoリストを作ってみました!
書き方
Vue.jsは書き方が何種類かありますが、今回はHTML,Javascriptのファイルに分けて書きたいと思います。
ディレクトリツリー
root/
 ┝ index.html
 └  javascript/
  └ app.js
HTMLのコード
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
 <title>Todoリスト</title>
 <!-- CDNにてVue.jsを導入 -->
 <script src="https://unpkg.com/vue@2.5.17"></script>
</head>
<body>
 <div id="app">
    <!-- 新しいタスクの入力フォーム -->
    <input type="text" placeholder="新しいタスク" v-model="newTask">
    <input type="submit" value="追加" @click="addTask">
    <!-- 達成率を表示 -->
    達成数: {{ completedTasks }} / {{ totalTasks }}
    <!-- タスクの一覧 -->
    <ul>
      <li v-for="(task, index) in tasks" :key="task.title">
      {{ task.title }}
      <button v-if="task.done" @click="completed(index)">完了</button>
      <label v-else>完了済み</label>
      <button @click="deleteTask(index)">削除</button>
      </li>
    </ul>
  </div>
  <script src="javascript/app.js"></script>
</body>
Javascriptのコード
app.js
const tasks = [
  {
    title: 'sample',
    done: false
  }
]
var app = new Vue({
  el: "#app",
  data: {
    tasks: tasks,
    newTask: null
  },
  methods: {
    completed: function(index) {
      this.tasks[index].done = true
    },
    addTask: function() {
      if(newTask){
        this.tasks.push({ title: this.newTask, done: false })
        this.newTask = null
      }
    },
    deleteTask: function(index) {
      this.tasks.splice(index, 1)
    }
  },
  computed: {
    completedTasks: function() {
      var count = 0
      for(let i = 0; i < this.tasks.length; i++){
        if(this.tasks[i].done){
          count++
        }
      }
      return count
    },
    totalTasks: function() {
      return this.tasks.length
    }
  }
})
実行結果
まとめ
今回はCDNでお手軽にVue.jsを導入してTodoリストを作成しました。
今後はVueCLIを使用して導入し単一ファイルでアプリケーションを作成したいと思います。

