2017-01-11 5 views
0

これまで数多くの入力を追加しようとしていますが、私は2つの結果に達しました。Vue.jsを使用して複数の数値入力をまとめて

最初に入力を使用すると、計算結果は入力されたすべての桁を加算します。

第2に、v-モデルを使用して、配列に入れるチェックボックスを使用するが、すべてのボックスが互いにマッチングするようにする。

<template> 
       <div class="panel panel-default"> 
        <div class="panel-heading">{{credits}}</div> 
         <div v-for="meal in title"> 
         <input v-bind:id="meal" v-model.number="used_credits" type="number">{{used_credits}} 
        <div class="panel-body"> 

        </div> 
       </div> 

</template> 

はこれが(少し)トリッキーなビットであるあなたに

+0

達成しようとしている。たぶん、もう少しコードを与えることができますか?とにかく:すべての入力をまったく同じモデルにバインドしているので、常に同じ価値を持っているのです。 – Bengt

+0

私はもっとよく説明します。例えば、3つありました。 v-forによって開発された数値入力。ユーザーは最初に2を入力し、次に2と5を入力します。私は数字を一緒に追加して、ユーザー入力として2、4、9を出力したいと思います。 –

+0

申し訳ありませんもっとコードがありません。次のステップは苦労しているステップです。 –

答えて

2

よしを、ありがとう:

あり短いコードは次のようです。テンプレートループでv-modelを操作する場合、割り当てられたモデルが反復ごとに異なることを確認する必要があります。それ以外の場合は、すべての入力がまったく同じモデルインスタンスにバインドされます。 これを実現するには、すべてのモデルを格納し、ループ内で使用可能なキーを使用してこれらのモデルにアクセスするオブジェクトを使用します。 はここ(スニペットに基づいて)いくつかのコードです:

<template> 
 
    <div> 
 
    <div>{{ credits }}</div> 
 
    <div v-for="meal in meals"> 
 
     <input :id="meal" v-model.number="creditsPerMeal[meal]" type="number"> 
 
    </div> 
 
    <div> 
 
     Credits used: {{creditsSum}} 
 
    </div> 
 
    </div> 
 
</template> 
 

 
<script> 
 
    export default { 
 
    name: 'test-component', 
 
    data: function() { 
 
     let meals = [ 
 
     'pizza', 'pasta', 'salad' 
 
     ] 
 

 
     let creditsPerMeal = {} 
 
     for (let meal of meals) { 
 
     creditsPerMeal[meal] = 0 
 
     } 
 

 
     return { 
 
     credits: 10, 
 
     meals, 
 
     creditsPerMeal 
 
     } 
 
    }, 
 
    computed: { 
 
     creditsSum() { 
 
     return Object.values(this.creditsPerMeal).reduce((a, b) => a + b, 0) 
 
     } 
 
    } 
 
    } 
 
</script>

トリッキーな部分は、私たちのモデルを保存する必要があるオブジェクトは、すべてのキーで事前に初期化されなければならないことです。そうでない場合、計算されたプロパティcreditsSumは更新されません。 食べ物やその他の手段を使って食べ物を動的に食べるなら、これはうまくいかないかもしれません。それを行う必要がある場合は、スニペットで使用した計算されたプロパティの代わりにウォッチ関数を使用することを検討してください。

Vueおよびthis partの計算されたプロパティとウォッチャーの変更検出の詳細については、this part of the documentationを参照してください。

編集: 場合は、あなたが、あなたは上記のスニペットに次のようにvarを持つすべてのletとループを交換する必要がある場合がありますBabelようtranspilerを使用していない:私は何を」正確にわからない

var meals = [ 
    'pizza', 'pasta', 'salad' 
    ] 

    var creditsPerMeal = {} 
    for (var i = 0; i < meals.length; i++) { 
    creditsPerMeal[meals[i]] = 0 
    } 
+0

ありがとうBengt、遅れて返信して申し訳ありません。コードに問題があります。モジュールのビルドに失敗します。 v-model.numberが[]で使用されているようです。あなたはなにか考えはありますか? –

+0

こんにちは!コンソールは何を言いますか? – Bengt

+0

「Uncaught Error:Module build failed:Node.initialiseでエラー 」というメッセージが表示されます。ありがとう! –

関連する問題