前提・実現したいこと
完了のラジオボタンを選択中に新規タスク追加した際に、作業中のタスクが表示されないようにしたい。
反対に作業中のラジオボタン選択中に「作業中」のボタンを押して「完了」に変わった瞬間に状態が完了になったものは表示されないようにしたい。
発生している問題・エラーメッセージ
このように完了のラジオボタンを選択している時にタスクを追加すると作業中のタスクまで表示されてしまいます。
特にエラーは出ていません。
該当のソースコード
HTML
1<template> 2 <div> 3 <h1>ToDoリスト</h1> 4 <form> 5 <input type="radio" name="state" id="allTodo" checked v-on:change="allTodo" /> 6 <label for="allTodo">すべて</label> 7 <input type="radio" name="state" id="workingTodo" v-on:change="workingTodo" /> 8 <label for="workingTodo">作業中</label> 9 <input type="radio" name="state" id="doneTodo" v-on:change="doneTodo" /> 10 <label for="doneTodo">完了</label> 11 </form> 12 13 <div> 14 <table> 15 <thead> 16 <tr> 17 <th>ID</th> 18 <th>コメント</th> 19 <th>状態</th> 20 </tr> 21 </thead> 22 23 <tbody id="todoList"> 24 <tr 25 v-for="(todo, index) in todos" 26 :key="todo.state" 27 v-bind:class="{ hide: todo.viewChange}" 28 > 29 <td>{{ index }}</td> 30 <td>{{ todo.task }}</td> 31 <td> 32 <button class="state-management-button" @click="changeState(index)">{{ todo.state }}</button> 33 </td> 34 <td> 35 <button @click="deleteTask(index)">削除</button> 36 </td> 37 </tr> 38 </tbody> 39 </table> 40 </div> 41 42 <h2>新規タスクの追加</h2> 43 <form> 44 <input type="text" class="todoInput" v-model="newTask" /> 45 <button type="submit" value="追加" @click="addNewTask">追加</button> 46 </form> 47 </div> 48</template>
javascript
1<script> 2export default { 3 data() { 4 return { 5 newTask: "", 6 todos: [] 7 }; 8 }, 9 methods: { 10 addNewTask(e) { 11 e.preventDefault(); 12 if (this.newTask.match(/\S/g)) { 13 this.todos.push({ 14 task: this.newTask, 15 state: "作業中", 16 viewChange: false 17 }); 18 } 19 this.newTask = ""; 20 }, 21 deleteTask(id) { 22 if (id > -1) { 23 this.todos.splice(id, 1); 24 } 25 }, 26 changeState(id) { 27 if (this.todos[id].state === "作業中") { 28 this.todos[id].state = "完了"; 29 } else if (this.todos[id].state === "完了") { 30 this.todos[id].state = "作業中"; 31 } 32 }, 33 workingTodo(e) { 34 if (e.target.checked) { 35 this.todos.forEach(todo => { 36 if (todo.state === "完了") { 37 todo.viewChange = true; 38 } else { 39 todo.viewChange = false; 40 } 41 }); 42 } 43 }, 44 doneTodo(e) { 45 if (e.target.checked) { 46 this.todos.forEach(todo => { 47 if (todo.state === "作業中") { 48 todo.viewChange = true; 49 } else { 50 todo.viewChange = false; 51 } 52 }); 53 } 54 console.log(e.target.checked); 55 }, 56 allTodo(e) { 57 if (e.target.checked) { 58 this.todos.forEach(todo => { 59 todo.viewChange = false; 60 }); 61 } 62 } 63 } 64}; 65</script>
css
1<style scoped> 2.state-management-button { 3 margin-right: 10px; 4} 5 6.todoInput { 7 margin-right: 10px; 8} 9 10.hide { 11 display: none; 12} 13</style>
Vue.jsでコードを書いています。
今は、作業中、完了のそれぞれのラジオボタンが選択をした時に
それぞれのタスクが保持しているstateの状態によってCSSの.hideを
付けたり外したりして表示・非表示を制御してます
試したこと
当初は各メソッドでe.target.checkedを付けずに実装しておりそれでも表示・非表示はできる状態です。
試しにe.target.checkedを付けて実装してみたのですが状況変わらずでした。
何かいい方法があればご教授いただければと思い質問させていただきました????♂️
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 05:49
2021/01/13 06:07
2021/01/13 07:22
2021/01/14 05:43
2021/01/14 06:11
2021/01/14 06:12
2021/01/14 06:29
2021/01/14 07:39
2021/01/14 08:03
2021/01/16 02:17
2021/01/16 02:48 編集
2021/01/16 03:05
2021/01/16 04:30
2021/01/16 06:23
2021/01/16 06:59
2021/01/16 09:06