質問編集履歴

1

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

2020/07/23 20:55

投稿

Junkichi89
Junkichi89

スコア8

test CHANGED
File without changes
test CHANGED
@@ -447,3 +447,199 @@
447
447
 
448
448
 
449
449
  ここにより詳細な情報を記載してください。
450
+
451
+ 残りタスクが1つになった後、削除ボタンが作動しなってしまいました。
452
+
453
+ 削除ボタンを押すとすべてのタスクを削除できるようにし、連番も再び初めからふりなおすにしたいのですが、
454
+
455
+ これは、新たに質問をした方が良いでしょうか?
456
+
457
+
458
+
459
+ ```HTMLVue
460
+
461
+ <!DOCTYPE html>
462
+
463
+ <html lang="ja">
464
+
465
+
466
+
467
+ <head>
468
+
469
+ <meta charset="UTF-8">
470
+
471
+ <title>ToDo List Vue-version</title>
472
+
473
+
474
+
475
+ <link rel="stylesheet" href="css/styles.css">
476
+
477
+ </head>
478
+
479
+
480
+
481
+ <body>
482
+
483
+ <h2>ToDoリスト</h2>
484
+
485
+ <div id="app">
486
+
487
+ <label><input type="radio" name="list" value="all" v-model="filter">すべて</label>
488
+
489
+ <label><input type="radio" name="list" value="active" v-model="filter">作業中</label>
490
+
491
+ <label><input type="radio" name="list" value="completed" v-model="filter">完了</label>
492
+
493
+ <p>ID コメント 状態</p>
494
+
495
+
496
+
497
+ <table>
498
+
499
+ <tr v-for="todo in filteredTodos">
500
+
501
+ <td>{{ todo.id }}</td>
502
+
503
+ <td>{{ todo.title }}</td>
504
+
505
+ <td><button @click="statusChange(todo.id)">{{ todo.statusBtn }}</button></td>
506
+
507
+ <td><button @click="deleteTask(todo.id)">{{ todo.delBtn }}</button></td>
508
+
509
+ </tr>
510
+
511
+ </table>
512
+
513
+ <h2>新規タスクの追加</h2>
514
+
515
+ <form @submit.prevent="addTask">
516
+
517
+ <input type="text" v-model="newTask">
518
+
519
+ <input type="submit" value="追加" class="button">
520
+
521
+ </form>
522
+
523
+ </div>
524
+
525
+
526
+
527
+
528
+
529
+ <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
530
+
531
+ <script>
532
+
533
+ 'use strict';
534
+
535
+
536
+
537
+ new Vue({
538
+
539
+ el: '#app',
540
+
541
+ data: {
542
+
543
+ id: 0, statusBtn: '', newTask: '', todos: [], filter: 'all'
544
+
545
+ },
546
+
547
+ computed: {
548
+
549
+ filteredTodos() {
550
+
551
+ if (this.filter === 'all') {
552
+
553
+ return this.todos
554
+
555
+ } else if (this.filter === 'completed') {
556
+
557
+ return this.todos.filter((todo) => {
558
+
559
+ return todo.statusBtn === '完了'
560
+
561
+ })
562
+
563
+ } else if (this.filter === 'active') {
564
+
565
+ return this.todos.filter((todo) => {
566
+
567
+ return todo.statusBtn === '作業中'
568
+
569
+ })
570
+
571
+ }
572
+
573
+ }
574
+
575
+ },
576
+
577
+ methods: {
578
+
579
+ addTask: function () {
580
+
581
+ let item = {
582
+
583
+ id: this.id++, title: this.newTask, statusBtn: '作業中', delBtn: '削除'
584
+
585
+ }
586
+
587
+ this.todos.push(item);
588
+
589
+ this.newTask = '';
590
+
591
+ },
592
+
593
+ statusChange: function (id) {
594
+
595
+ for (let todo of this.todos) {
596
+
597
+ if (todo.id === id) {
598
+
599
+ if (todo.statusBtn === '作業中') {
600
+
601
+ return todo.statusBtn = '完了'
602
+
603
+ } else {
604
+
605
+ return todo.statusBtn = '作業中'
606
+
607
+ }
608
+
609
+ break
610
+
611
+ }
612
+
613
+ }
614
+
615
+ },
616
+
617
+ deleteTask: function (id) {
618
+
619
+ for (let todo of this.todos) {
620
+
621
+ if (todo.id === id) {
622
+
623
+ this.todos.splice(todo.id, 1);
624
+
625
+ break
626
+
627
+ }
628
+
629
+ }
630
+
631
+ }
632
+
633
+ }
634
+
635
+ });
636
+
637
+ </script>
638
+
639
+ </body>
640
+
641
+
642
+
643
+ </html>
644
+
645
+ ```