【问题标题】:How to trigger a computed function after typing in input field in vue js?在vue js中输入输入字段后如何触发计算函数?
【发布时间】:2019-02-07 08:11:52
【问题描述】:

现在我正在使用以下代码。当我使用 @change 时它不起作用?

 <div class="col-md-3">
  <div class="form-group">
  <label>Longitude</label>
  <input id="lngVillage" 
         type="text" 
         class="form-control" 
         placeholder="Longitude of Village" 
         name="lngVillage" 
         required="" 
         v-model="lng" 
         pattern="^[0-9]+\.[0-9][0-9][0-9][0-9]$" 
         maxlength="7" 
         oninvalid="this.setCustomValidity('Enter a valid Longitude')"
         oninput="this.setCustomValidity('')">
  </div>
 </div>
<div v-if="isDisabled == false">
</div>

我的计算函数是

 computed: {
  isDisabled() {
      if (this.lng.length > 5) {
        axios.get('url')
          .then(response => {
          })
          .catch(e => {
            this.errors.push(e)
          })
      } else {
        return true;
      }
  }
 },

在输入字段中输入后,我需要调用 isDisabled()。请帮助我找到解决方案。

【问题讨论】:

  • isDisabled() 是计算属性,因此每次更改输入时都会调用它。你还想要什么。
  • 是否可以在输入更改时调用 isDiabled
  • 它不是已经在 v-model="lng" 的输入上被调用了吗?在您的 isDisabled 中的 console.log() 每次输入更改时都会记录它
  • 先生,如果我删除此代码,
    我不会得到相同的
  • 你不能在计算属性中使用异步逻辑,除非你使用类似:github.com/foxbenjaminfox/vue-async-computed

标签: vue.js vuejs2 vue-component vue-router


【解决方案1】:

有更多方法可以解决这个问题。您可以使用计算的 setter 来解决它,但我相信观察者在这里会更合适。使用以下代码设置对 lng 数据的监视。

computed: {
  isDisabled() {
      return (this.lng.length > 5) ? true : false
  }
},
watch: {
  lng: function(newValue, oldValue) {
    if (newValue.length > 5 && this.lar.length > 5) {
      this.executeCall();
    }
  },
  lar: function(newValue, oldValue) {
    if (newValue.length > 5 && this.lng.length > 5) {
      this.executeCall();
    }
  }
},
methods: {
  executeCall() {
    axios
      .get("url")
      .then(response => {})
      .catch(e => {
        this.errors.push(e);
      });
  }
}

更多详情请参考https://vuejs.org/v2/guide/computed.html#Watchers

【讨论】:

  • 先生,如何使用计算解决。先生,如果我删除此代码,
    我的代码将不一样
  • 先生,我有一个 lat 和 lng 输入字段,如何使用您的代码触发。我有两个输入字段,分别是 lar 和 lng,在更改两个我需要触发时,怎么会发生这种情况
  • 我更新了答案,将 lar 和 lng 都考虑在内。如果我理解正确,您需要做的是检查 lar 和 lng 的输入是否都大于 5(这是我理解的场景)。如果 lng 较小,则需要隐藏 div。
  • 先生,有什么办法可以去掉
    代码,
  • 我不太确定你想要完成什么。也许更新问题,以便这里的每个人都了解您想要做什么。关于您最初关于在输入更改时触发某些内容的问题,上面的代码将做到这一点。
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多