【问题标题】:Need help for a Vue - BMI Calculator需要 Vue 的帮助 - BMI 计算器
【发布时间】:2023-03-13 06:10:01
【问题描述】:

我正在使用 Vue 学习 Webdev。在我的项目中,我构建了一个组件来计算一个人的 BMI。我用bootstrap-vue 创建了一个表单来获取我需要的值。现在我需要 JavaScript 部分的帮助。就是不知道怎么改。

<template>
  <div class="bmi-calc">

      <b-card title="BMI Calculator" img-src="https://picsum.photos/600/300/?image=25" img-alt="Image" img-top tag="article" style="max-width: 20rem;" class="mb-2">

        <b-form @submit="onSubmit" v-if="show">
            <!-- Height -->
            <b-form-group id="input-group-height" label="height" label-for="input-height" description="Height in cm">
                <b-form-input id="input-height" v-model="form.height" type="height"></b-form-input>
            </b-form-group>
            <!-- Weight -->
            <b-form-group id="input-group-weight" label="weight" label-for="input-weight" description="Weight in kg">
                <b-form-input id="input-weight" v-model="form.weight" type="weight"></b-form-input>
            </b-form-group>
        </b-form>

        <b-button type="submit" variant="primary">Submit</b-button>
        <div>Solution is: <strong>{{ solution }}</strong></div>

        </b-card>
    </div>
</template>


<script>
export default {
  data () {
    return {
      form: {
        height: '',
        weight: ''
      },
      show: true
    }
  },
  methods: {
    onSubmit (evt) {
      evt.preventDefault()
      var solution = null
      solution = this.weight / (this.height) ^ 2
    },
    onReset (evt) {
      evt.preventDefault()
      // Reset our form values
      this.form.height = ''
      this.form.weight = ''
      // Trick to reset/clear native browser form validation state
      this.show = false
      this.$nextTick(() => {
        this.show = true
      })
    },
  }
}

</script> 

我使用的公式:

【问题讨论】:

    标签: javascript vue.js bootstrap-vue


    【解决方案1】:

    几个问题:

    1. 提交-按钮应该在表单内,以便正确触发submit-事件:
    <b-form>
      <b-form-group>...</b-form-group>
    
      <b-button type="submit">Submit</b-button>
    </b-form>
    
    1. 模板引用solution,但这只是onSubmit() 中的一个局部变量。要使其可用于渲染,请将其初始化为来自 data() 的道具,如下所示。稍后您将使用this.solution = /* new value */ 将其设置为onSubmit()
    export default {
      data() {
        return {
          //...
          solution: 0,
        }
      }
    }
    
    1. onSubmit()指的是this.weightthis.height,但这些值实际上存储在this.form下,所以它们应该分别是this.form.weightthis.form.height

    2. BMI 计算未使用正确的语法对数字进行平方。您可以使用Math.pow(),也可以将其与自身相乘:

    export default {
      methods: {
        onSubmit() {
          this.solution = this.form.weight / Math.pow(this.form.height, 2)
          // OR
          this.solution = this.form.weight / (this.form.height * this.form.height)
        }
      }
    }
    
    1. &lt;b-form-input&gt;s 绑定到form.heightform.weight,但它们目前是字符串,这将导致BMI 计算出错,需要数字。目前,输入类型被错误地设置为type="height"type="weight",但它们应该是type="number"。此外,当使用v-model 作为数字时,请确保使用.number modifier,以便将值更新为正确的类型:
    <b-form-input v-model.number="form.weight" type="number">
    <b-form-input v-model.number="form.height" type="number">
    

    【讨论】:

    • 非常感谢朋友!但是你知道我如何将重量作为浮点数输入吗?目前,它给了我一个小数的方法,所以我只需将所有内容乘以 10000 即可获得正确的值。
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多