質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

420閲覧

vue.jsでtodoリスト

FightMoney

総合スコア11

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/28 03:56

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で実装するにはどのような記述をすればいいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

selectで選択した状態を一括で削除するボタンを設置したい

やりたいのはこういうこと?

removeTodo: function() { var targetList = this.list; var selectChickFlg = this.chick; this.list = targetList.filter(function(i) { var chickFlg = i.done; var num = i.index; if (selectChickFlg === 'チェックあり') { return i.done === false; } else if(selectChickFlg === 'チェックなし') { return i.done === true; } }); }

https://jsfiddle.net/c73nwrrv/1/

投稿2018/05/28 04:15

編集2018/05/28 04:38
xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FightMoney

2018/05/28 06:28

ありがとうございます! 勉強になりました
FightMoney

2018/05/28 06:36

ちなみに var targetList = this.list; this.list = targetList.filter(function(i) { を var targetList = this.list; targetList = targetList.filter(function(i) { にすると動かないのはなぜですか?
xenbeat

2018/05/28 10:28

まずはご自身で調べてみて、どうしてもわからなかったら別途質問を立ててください。 Javascriptにおける参照渡し、値渡しについて調べられると良いでしょう。 本質問とは違う内容なので、ここでは回答を控えさせていただきます。
guest

0

targetList.filterって合ってるんですか?forEachではなく?
removeTargetListに新しい配列を作る必要もよくわかりませんね…
一つずつtargetListを回して都度targetList.splice(i,1)すればいいと思うんですが

投稿2018/05/28 04:18

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FightMoney

2018/05/28 06:28

vueのfilterを使ってなんとかしようと苦肉の策でremoveTargetListを作成しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問