teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

回答いただいたサンプルコードを参考に書き換えさせていただきました。作業中・完了は上手く作動するようになったのですが、削除ボタンがタスクが残り一つになった際にうまく作動しなくなってしまいます。

2020/07/23 20:55

投稿

Junkichi89
Junkichi89

スコア8

title CHANGED
File without changes
body CHANGED
@@ -222,4 +222,102 @@
222
222
 
223
223
  ### 補足情報(FW/ツールのバージョンなど)
224
224
 
225
- ここにより詳細な情報を記載してください。
225
+ ここにより詳細な情報を記載してください。
226
+ 残りタスクが1つになった後、削除ボタンが作動しなってしまいました。
227
+ 削除ボタンを押すとすべてのタスクを削除できるようにし、連番も再び初めからふりなおすにしたいのですが、
228
+ これは、新たに質問をした方が良いでしょうか?
229
+
230
+ ```HTMLVue
231
+ <!DOCTYPE html>
232
+ <html lang="ja">
233
+
234
+ <head>
235
+ <meta charset="UTF-8">
236
+ <title>ToDo List Vue-version</title>
237
+
238
+ <link rel="stylesheet" href="css/styles.css">
239
+ </head>
240
+
241
+ <body>
242
+ <h2>ToDoリスト</h2>
243
+ <div id="app">
244
+ <label><input type="radio" name="list" value="all" v-model="filter">すべて</label>
245
+ <label><input type="radio" name="list" value="active" v-model="filter">作業中</label>
246
+ <label><input type="radio" name="list" value="completed" v-model="filter">完了</label>
247
+ <p>ID コメント 状態</p>
248
+
249
+ <table>
250
+ <tr v-for="todo in filteredTodos">
251
+ <td>{{ todo.id }}</td>
252
+ <td>{{ todo.title }}</td>
253
+ <td><button @click="statusChange(todo.id)">{{ todo.statusBtn }}</button></td>
254
+ <td><button @click="deleteTask(todo.id)">{{ todo.delBtn }}</button></td>
255
+ </tr>
256
+ </table>
257
+ <h2>新規タスクの追加</h2>
258
+ <form @submit.prevent="addTask">
259
+ <input type="text" v-model="newTask">
260
+ <input type="submit" value="追加" class="button">
261
+ </form>
262
+ </div>
263
+
264
+
265
+ <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
266
+ <script>
267
+ 'use strict';
268
+
269
+ new Vue({
270
+ el: '#app',
271
+ data: {
272
+ id: 0, statusBtn: '', newTask: '', todos: [], filter: 'all'
273
+ },
274
+ computed: {
275
+ filteredTodos() {
276
+ if (this.filter === 'all') {
277
+ return this.todos
278
+ } else if (this.filter === 'completed') {
279
+ return this.todos.filter((todo) => {
280
+ return todo.statusBtn === '完了'
281
+ })
282
+ } else if (this.filter === 'active') {
283
+ return this.todos.filter((todo) => {
284
+ return todo.statusBtn === '作業中'
285
+ })
286
+ }
287
+ }
288
+ },
289
+ methods: {
290
+ addTask: function () {
291
+ let item = {
292
+ id: this.id++, title: this.newTask, statusBtn: '作業中', delBtn: '削除'
293
+ }
294
+ this.todos.push(item);
295
+ this.newTask = '';
296
+ },
297
+ statusChange: function (id) {
298
+ for (let todo of this.todos) {
299
+ if (todo.id === id) {
300
+ if (todo.statusBtn === '作業中') {
301
+ return todo.statusBtn = '完了'
302
+ } else {
303
+ return todo.statusBtn = '作業中'
304
+ }
305
+ break
306
+ }
307
+ }
308
+ },
309
+ deleteTask: function (id) {
310
+ for (let todo of this.todos) {
311
+ if (todo.id === id) {
312
+ this.todos.splice(todo.id, 1);
313
+ break
314
+ }
315
+ }
316
+ }
317
+ }
318
+ });
319
+ </script>
320
+ </body>
321
+
322
+ </html>
323
+ ```