| <script>let id = 0;
 
 export default {
 data() {
 return {
 newTodo: "",
 hideCompleted: false,
 todos: [
 { id: id++, text: "Learn HTML", done: true },
 { id: id++, text: "Learn JavaScript", done: true },
 { id: id++, text: "Learn Vue", done: false },
 ],
 };
 },
 computed: {
 filteredTodos() {
 return this.todos.filter((x) => x.done != this.hideCompleted);
 },
 },
 methods: {
 addTodo() {
 this.todos.push({ id: id++, text: this.newTodo, done: false });
 this.newTodo = "";
 },
 removeTodo(todo) {
 this.todos = this.todos.filter((t) => t !== todo);
 },
 },
 };
 </script>
 
 <template>
 <form @submit.prevent="addTodo">
 <input v-model="newTodo" />
 <button>Add Todo</button>
 </form>
 <ul>
 <li v-for="todo in filteredTodos" :key="todo.id">
 <input type="checkbox" v-model="todo.done" />
 <span :class="{ done: todo.done }">{{ todo.text }}</span>
 <button @click="removeTodo(todo)">X</button>
 </li>
 </ul>
 <button @click="hideCompleted = !hideCompleted">
 {{ hideCompleted ? 'Show all' : 'Hide completed' }}
 </button>
 </template>
 
 <style>
 .done {
 text-decoration: line-through;
 }
 </style>
 
 |