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

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

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

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

Q&A

解決済

1回答

1227閲覧

Vue.js クリックした要素をリアクティブに変更するには

Web_akira

総合スコア34

Vue.js

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

0グッド

0クリップ

投稿2019/04/11 10:15

編集2019/04/12 05:41

Vue.js 3日目の初心者です。

methods に以下のような処理を追加しています。

やりたいこと

現在の合計値: presentSum が 最大値を超えている場合、
リアクティブにクリックした要素のデータを更新(マイナス1)したい、ということです。

javascript

1max_chk: function (event) { 2 let presentSum = this.sumRows(); 3 if (presentSum >= this.maxNum) { 4 event.target.value = event.target.value - 1; 5 } 6},

### 何が問題か
上記の方法では、「リアクティブ」にはデータが変更されません。
DOM 要素を更新しているだけで、クリックした要素とデータバインディングしている別要素とは連携がとれていません。
一見、うまくいったように見えるのですが、別要素をクリックすると、そちらの値に上書きされてしまいます。

** 4/12 追記: 質問を少し変更します。**
max_chk のメソッドの引数にデータバインディングしている要素の名前を入れ、
methods 内で受け取って、その名前を元に処理をするにはどうしたらいいでしょうか?
** 4/12 追記: ここまで **

分かれば単純な話だとは思うのですが…。
どうかご教示のほど、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

リアクティブの部分はVueの基礎になりますので、まずはVueのガイドをしっかり読むことをお勧めします。

リアクティブシステムについてはこの辺りになります。data()と{{ }}によるデータバインディングを使用してください。

データとメソッド

投稿2019/04/11 10:23

編集2019/04/11 10:24
devneko64bit

総合スコア164

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

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

Web_akira

2019/04/11 10:35

data()と{{ }} を使ってのデータバインディングはできています。 クリックした時に、ある条件であるかを調べ、 そうであればリアクティブに(意図的にメソッドの処理として)計算した値で書き換えたいのですが…。
devneko64bit

2019/04/11 10:44

プログラムの全体を載せてもらった方が分かりやすいかと思います。 配列をv-forで回してそれぞれの値をバインディングしているというような状態であれば、v-forはインデックスも取得できるのでインデックスごとmax_chkに渡してあげれば、リアクティブに更新できると思います。 ``` <input v-for="(n, idx) in nums" :value="n" @click="max_chk($event, idx)"/> ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問