todoの一括削除ボタンを設置
vue.jsを使用してHTMLとjsでTodoリストを作成しています。
html
1 <ul class="todoList"> 2 <li v-for="(todoItem , index) in list"> 3 <label> 4 <input class="todoChick" type="checkbox" v-model="todoItem.done"/> 5 <span>{{ todoItem.text }}</span> 6 </label> 7 </li> 8 </ul> 9 10 <input v-model="text" type="text" name="" value="" placeholder="入力してください"> 11 <input v-on:click="addTodo()" type="button" value="追加する"> 12 <div class="hoge">hoge</div> 13 <div> 14 <select id="removeStatus" v-model="chick"> 15 <option>チェックあり</option> 16 <option>チェックなし</option> 17 </select> 18 <input v-on:click="removeTodo()" type="button" value="削除する"> 19 </div>
js
1new Vue({ 2 el: '#app', 3 data:{ 4 text: '', 5 list: [ 6 {text: 'arr0', done: true , index: 0} , 7 {text: 'arr1', done: false , index: 1} , 8 {text: 'arr2', done: true , index: 2} , 9 {text: 'arr3', done: false , index: 3} 10 ], 11 chick: 'チェックあり' 12 }, 13 methods: { 14 addTodo: function() { 15 var newTodo = this.text; 16 var num = this.list.length; 17 18 if(newTodo){ 19 this.list.push( 20 {text: newTodo, done: false , index: num} 21 ); 22 this.text= ''; 23 }else{ 24 alert('入力してください'); 25 } 26 }, 27 removeTodo: function() { 28 var targetList = this.list; 29 var selectChickFlg = this.chick; 30 var removeTargetList = new Array(); 31 targetList.filter(function(i) { 32 var chickFlg = i.done; 33 var num = i.index; 34 35 if(selectChickFlg === 'チェックあり' && i.done === true){ 36 removeTargetList.push(num); 37 }else if(selectChickFlg === 'チェックなし' && i.done === false){ 38 removeTargetList.push(num); 39 } 40 41 if(removeTargetList.length > 0 && targetList.length === num + 1){ 42 for(var y = 0; y < removeTargetList.length; y++){ 43 44 targetList.splice(removeTargetList[y] , 1); 45 } 46 } 47 }); 48 } 49 } 50})
selectで選択した状態を一括で削除するボタンを設置したいのですが、下記のコード
js
1targetList.splice(removeTargetList[y] , 1);
ではindex番号の取り方がうまくいかず動作しません。
vueで実装するにはどのような記述をすればいいでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/28 06:28
2018/05/28 06:36
2018/05/28 10:28