开发者问题收集

为什么vue的方法不起作用?

2017-12-14
64

我尝试在 vue 上编写一个方法,为什么 'clickA' 不起作用,但 'clickB' 可行?

注意:解决方案应该让 throttle 函数像 'clickB' 一样工作。

new Vue({
  el: '#app',
  methods: {
    clickA: function() {
      _.throttle(function() {
        var date = new Date();
        var time = date.toLocaleTimeString();
        console.log('A clicked', time)
      }, 1000)
    },
    clickB: _.throttle(function() {
      var date = new Date();
      var time = date.toLocaleTimeString();
      console.log('B clicked', time)
    }, 1000)
  }
});
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>
<script src="https://unpkg.com/[email protected]/lodash.min.js"></script>
<div id="app">
  <button type="button" @click="clickA">A</button>
  <button type="button" @click="clickB">B</button>
</div>
2个回答

_.throttle 返回 一个新函数。仔细想想,可能有点难以理解,但确实有道理!

clickB 绑定到 _.throttle 返回的函数。

但是,在 clickA 中,您没有将点击操作绑定到 _.throttle 创建的函数。

maxpaj
2017-12-14

_.throttle 返回一个受限制的函数。

因此,您可以定义一个新函数:

var slowThing = _.throttle(fastThing)

或者,您可以将函数定义为属性:

object: {
    slowThing: _.throttle(fastThing)
}

但在上面的 clickA 中,受限制的函数未被分配:

slowThing: function() {
    // this creates a new function but doesn't execute it
    _.throttle(fastThing)
}
Dan Devorkin
2017-12-14