初歩的な質問で申し訳ございません。
最終的には、下記のようなイメージです。
[1] × [2] = <2>
[3] × [5] = <15>
[4] × [7] = <28>
<45>
(2 + 15 + 28)
※ []が入力箇所、<>が自動計算箇所
コンポーネント内のcomputed
で出力された計算結果を、全て足し算して計算結果を出力したいです。
コンポーネントを使用しなければ$emit
など考えなくていいと思いますが、今回はコンポーネントを用いた想定でお願いいたします。
上記の目標成果物に対して、下記2点がよくわかっておりません。
1点目:<input type="text" v-model="">と$emit を用いる方法
現在わかっていることは下記2点です。
- 子コンポーネントから親要素に情報を引き継ぐ際、
$emit
が必要 v-model
に対して$emit
する場合は、v-model
を分解しないといけない
(:value="sum" @input="$emit(sum = $event.target.value)"
)
しかし、どの参考例もbutton
を用いたもので、input text
を用いた$emit
の参考例がなく、進めなくなってしまいました。
2点目:v-forで出力されたv-modelの合算方法
1点目でとまっているので、まだ進めておりません。
調べた範囲では、下記のような書き方かなと思っております。
js
1this.lists.reduce(function(i, list) { return i + Number(list.sum); }
以上が質問になります。
下記に、現状のコードを記載させて頂きます。
現状のコード
html
1<!DOCTYPE html> 2<html> 3<head> 4 <title></title> 5</head> 6<body> 7 <div id="app"> 8 <calculation-input v-for="(list, i) in lists"></calculation-input> 9 <input type="text" name="" v-model="four"> 10 11 </div> 12 <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script> 13 <script src="main.js"></script> 14</body> 15</html>
js
1'use strict'; 2 3 4Vue.component('calculation-input', { 5 data: function () { 6 return { 7 one: 0, 8 two: 0 9 } 10 }, 11 template:` 12 <div> 13 <input type="number" v-model="one"> 14 <input type="number" v-model="two"> 15 <input class="input_sum" type="number" :value="sum" @input="$emit(sum = $event.target.value)"> 16 </div>`, 17 computed: { 18 sum: function() { 19 return this.one * this.two; 20 } 21 } 22 23}) 24 25let app = new Vue({ 26 el: '#app', 27 data: function() { 28 return { 29 lists: [1, 2, 3, 4] 30 } 31 }, 32 // よくわらない箇所 33 computed: { 34 four: function() { 35 return this.sum * 0.1; // 全てのsumを取得する方法がわからない、$emit で子コンポーネントの値を取得する方法がわからない 36 } 37 } 38})
どうぞ、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー