【问题标题】:Vue.js: Calling function on changeVue.js:更改时调用函数
【发布时间】:2017-09-19 16:26:21
【问题描述】:

我正在 Vue.js 中构建一个组件。我在页面上有一个输入,用户可以在其中请求一定的信用额度。目前,我正在尝试创建一个函数,在我输入时将输入量记录到控制台。(最终,我将根据用户输入显示/隐藏请求的文档。我不希望他们必须点击提交按钮。)

当我跳出输入字段时,下面的代码会记录它。这是我的 component.vue:

<template>
    <div class="col s12 m4">
      <div class="card large">
        <div class="card-content">
          <span class="card-title">Credit Limit Request</span>
          <form action="">
            <div class="input-field">
              <input v-model="creditLimit" v-on:change="logCreditLimit" id="credit-limit-input" type="text">
              <label for="credit-limit-input">Credit Limit Amount</label>
            </div>
          </form>
          <p>1. If requesting $50,000 or more, please attach Current Balance Sheet (less than 1 yr old).</p>
          <p>2. If requesting $250,000 or more, also attach Current Income Statement and Latest Income Tax Return.</p>
        </div>
      </div>    
    </div>
  </div>
</template>

<script>
export default {
  name: 'licenserow',
  data: () => ({
    creditLimit: ""
  }),
  methods: {
    logCreditLimit: function (){
      console.log(this.creditLimit)
    }
  }
}
</script>

如果我将 methods 更改为 computed,它可以工作 - 但每次记录该值时我都会收到错误提示 Invalid handler for event: change

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    使用input 事件。

    <input v-model="creditLimit" v-on:input="logCreditLimit" id="credit-limit-input" type="text">
    

    change only fires when the element loses focus 用于输入元素。 input 在每次文本更改时触发。

    【讨论】:

    • 完美地作为一个变化监听器,甚至与 v-model 一起工作。谢谢
    【解决方案2】:

    在 v-model 旁边绑定 @input 事件是不必要的。只需绑定 v-model 即可。模型会根据输入事件自动更新。

    new Vue({
      el: '#app',
      data: {
        message: ''
      }
    })
    <script src="https://unpkg.com/vue@2.4.4/dist/vue.min.js"></script>
    
    <div id="app">
      <input type="text" v-model="message"><br>
      Output: <span>{{ message }}</span>
    </div>

    如果您需要将更改记录到控制台,请创建特定的观察者:

    new Vue({
      el: '#app',
      data: {
        message: ''
      },
      watch: {
        message: function (value) {
          console.log(value) // log it BEFORE model is changed
        }
      }
    })
    <script src="https://unpkg.com/vue@2.4.4/dist/vue.min.js"></script>
    
    <div id="app">
      <input type="text" v-model="message"><br>
      Output: <span>{{ message }}</span>
    </div>

    【讨论】:

      【解决方案3】:
      <input v-model="yourVariableName" @input="yourFunctinNameToBeCall" id="test" type="text">
      

      您可以使用@change 来在完成时触发该功能 Ex- 从下拉列表中选择一个值

      但是这里你需要在按键时调用该函数(输入值)。所以在这种情况下使用@click

      【讨论】:

        猜你喜欢
        • 2018-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-19
        • 1970-01-01
        相关资源
        最近更新 更多