前提・実現したいこと
v-forで繰り返し表示しているボタンのテキストをクリックで個別に変更したい
発生している問題・エラーメッセージ
繰り返し表示のうち、一か所をクリックしたら、全箇所のテキストが変更されてしまいます。 クリックした個所の情報は取れてます。 ボタンがv-forの対象に入ってなく、methodsで真偽判定しているだけなので 全要素が変わってしまうのだと思いますが、色々試してもうまくいきません。
該当のソースコード
javascript
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Vue.js v-for</title> 7 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 8 </head> 9 <body> 10 <h2>v-for test</h2> 11 <div id="app"> 12 <table> 13 <thead> 14 <tr> 15 <th>名前</th> 16 <th>お気に入り</th> 17 </tr> 18 </thead> 19 <tbody> 20 <tr v-for="(item,index) in items" @click="onClick(index,$event)"> 21 <td>{{item.name}}</td> 22 <td><button>{{buttonText ? '追加する': '追加済み'}}</button></td> 23 </tr> 24 </tbody> 25 </table> 26 </div> 27 28 <script> 29 new Vue({ 30 el: '#app', 31 data: { 32 buttonText: 'true', 33 items: [ 34 { name: "リンゴ"}, 35 { name: "ミカン"}, 36 { name: "ブドウ"}, 37 ] 38 }, 39 40 methods: { 41 onClick: function (e) { 42 alert(e) 43 if(this.buttonText) { 44 this.buttonText = false 45 } else { 46 this.buttonText = true 47 } 48 }, 49 }, 50 }); 51 </script> 52 <script src="/js/script.js"></script> 53 </body> 54</html>
試したこと
・配列自体にbuttonText: trueを追加(pushではなく、最初から記入) ・<td v-for="buttonText in data">, <button v-for・・・> ・<tr v-for・・・> から <template v-for・・・>へ変更して <tr>内に挟む。 ・@click.各種修飾子 等
補足情報
実際はJsonを取得して、カートへ追加するような作業をしていますが
とりあえず上記のコードで動けば何とかなりそうです。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。