【问题标题】:VueJS two-way data binding bindingVueJS 双向数据绑定绑定
【发布时间】:2018-10-01 17:05:37
【问题描述】:

我想使用 Vue 的双向数据绑定动态更改 amounttotal 值。对于给定的产品price 是固定的。当用户更改amount 时,将计算total = amount * total。同样用户可以输入totalamount = total / price 将被计算。我在这一点上迷路了:

var app = new Vue({
  el: '#app',
  data: {
    amount: 1,
    price: 100,
  },
  computed: {
    calcTotal: function() {
      return this.total =
        parseFloat(this.amount) *
        parseFloat(this.price)
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
  amount: <input v-model="amount"> <br><br> price: <input v-model="price" disabled> <br><br> total: <input v-model="calcTotal"> <br><br>

</div>

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    除了计算属性 (calcTotal),您可以将 &lt;input&gt;s 中的 listen input-event 用于 amounttotal

    <input type="number" v-model="amount" @input="onAmountChange">
    <input type="number" v-model="total" @input="onTotalChange">
    

    amount&lt;input&gt; 的处理程序将设置 total&lt;input&gt; 的值,反之亦然:

      data() {
        return {
          amount: 0,
          total: 0,
          price: 100,
        }
      },
      methods: {
        onTotalChange(e) {
          const total = e.currentTarget.value;
          this.amount = total / this.price;
        },
        onAmountChange(e) {
          const amount = e.currentTarget.value;
          this.total = amount * this.price;
        }
      }
    

    new Vue({
      el: '#app',
      data() {
        return {
          amount: 0,
          total: 0,
          price: 100,
        }
      },
      methods: {
        onTotalChange(e) {
          const total = e.currentTarget.value;
          this.amount = total / this.price;
        },
        onAmountChange(e) {
          const amount = e.currentTarget.value;
          this.total = amount * this.price;
        }
      }
    })
    <script src="https://unpkg.com/vue@2.5.17"></script>
    
    <div id="app">
      <div>amount: <input type="number" v-model="amount" @input="onAmountChange"></div>
      <div>price: <input type="number" v-model="price" disabled></div>
      <div>total: <input type="number" v-model="total" @input="onTotalChange"></div>
    </div>

    【讨论】:

    • 太棒了!非常感谢@tony19。如何使用金额值(比如说 1)启动,以便在页面首次加载时显示总计。现在页面加载了amount=0total=0,但我想从金额值开始。
    • @russell 没问题 :) 关于amounttotal 的初始值,只需更改data() 中的值即可。
    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 2018-04-22
    • 2013-02-24
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多