質問編集履歴
1
回答いただいたサンプルコードを参考に書き換えさせていただきました。作業中・完了は上手く作動するようになったのですが、削除ボタンがタスクが残り一つになった際にうまく作動しなくなってしまいます。
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
|
+
```
|