【问题标题】:How to make two inputs react to each other in Vue.js如何在 Vue.js 中让两个输入相互反应
【发布时间】:2019-04-02 00:02:26
【问题描述】:

我正在构建一个工具来计算购买某些材料的成本。 问题是有时用户会按质量或体积购买它。

我想要一种有两个活动输入(质量和体积)的方法,并且每个输入都会根据材料密度自动更新。

我尝试了计算属性和观察者,但无法使其正常工作。

这是我想要的样子和我尝试过的样子 https://jsfiddle.net/yfuk958j/

  Mass = <input v-model.number="mass"> <br/> 
  Volume = <input v-model.number="volume"><br/>
  computed: {
    volume() {
      return this.mass * this.density
    },
    mass () { 
    return this.volume / this.density 
    }
   }

【问题讨论】:

    标签: javascript vue.js input reactive-programming


    【解决方案1】:

    您只需要 2 个输入,每个都绑定到您的 vm 的一个属性。还有一个监视功能,可以在其他更改时更新其中任何一个:

    Vue.config.devtools = false;
    Vue.config.productionTip = false;
    new Vue({
      el: '#app',
      data: {
        density: 1,
        mass: 1, 
        volume: 1,
        inputType: 'mass'
      },
      watch: {
        mass(val) {
          this.volume = val/this.density;
        },
        volume(val) {
          this.mass = val*this.density;
        },
        density(val) {
          this.volume = this.mass/val;
        }
      },
      methods: {
        round(val) {
          return Math.round(val * 1e3)/1e3
        }
      }
    })
    span {min-width: 100px; display: inline-block;}
    input[type="range"] {width: 200px;}
    input[type="number"] {width: 100px;}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    
    <div id="app">
      <div>
        <span>Density:</span> <input v-model="density" type="range" min=".1" max="10" step="0.1">{{density}}g/cm<sup>3</sup>
      </div>
      <div>
        <div>
          <span>Mass:</span> <input v-model="mass" type="range" min="1" max="1e4" step="0.001">
          <input v-model="mass" type="number" min="1" step="0.1" max="1e4">g
          [Volume: {{round(volume)}}cm<sup>3</sup>]
        </div>
        <div>
          <span>Volume:</span> <input v-model="volume"  type="range" min="2" max="1e4" step="0.001">
          <input v-model="volume"  type="number" min="2" max="1e4" step="0.1">cm<sup>3</sup>
          [Mass: {{round(mass)}}g]
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多