如何临时分析<input>字段?

WoJ*_*WoJ 5 javascript vue.js

我想<input>在没有用户活动时分析字段的内容.

我将在下面举一个简单的例子(计算字符数)但实际分析如果非常昂贵,所以我想分批进行,当用户有一些不活动而不是每次更改绑定变量时都这样做.

简单分析的代码可以是

var app = new Vue({
  el: '#root',
  data: {
    message: ''
  },
  computed: {
    // a computed getter
    len: function() {
      // `this` points to the vm instance
      return this.message.length
    }
  }
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.6/vue.js"></script>
<div id="root">
  <input v-model="message">Length: <span>{{len}}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

我的问题是function()每次改变都会被调用message.是否有内置机制来限制查询,或者是JS中这种问题的典型方法?

sob*_*evn 6

这按照预期的方式运作.正如文档中所述:

它将更新原始数据更改时依赖于计算属性的任何绑定

但有一种方法可以做到:

var app = new Vue({
  el: '#root',
  data: {
    message: '',
    messageLength:  0
  },
  methods: {
    len: _.debounce(
      function() {
        this.messageLength = this.message.length
      }, 
      300 // time
    )
  }
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.6/vue.js"></script>
<script src="https://unpkg.com/underscore@1.8.3"></script> <!-- undescore import -->
<div id="root">
  <input v-model="message" v-on:keyup="len">Length: <span>{{ messageLength }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

完整示例:https://vuejs.org/v2/guide/computed.html#Watchers

ps关于computedvue作者同步的评论:https://forum-archive.vuejs.org/topic/118/throttle-computed-properties/3

关于和之间的差异的pps 经典文章.debouncethrottle