开发者问题收集

这在 Vue 中未定义,使用 debounce 方法

2020-05-29
2101

我知道使用箭头语法会导致“this”无法映射到 Vue 实例,但是在我的示例中,我使用的是 lodash.debounce,据我所知,我这里没有使用箭头语法?

返回无法读取未定义的属性“$emit”

methods: {
  onChange: debounce(function(el) {
    this.$emit('change', el.target.value)
  }, 1000)
}

我在不使用箭头符号的情况下编写此 debounce 函数的方式是否存在语法错误?

1个回答

您的代码应该可以正常工作。您能提供一些其他背景信息吗?

略有改进:通常最好为每个实例创建去抖动函数,而不是在该组件的所有实例之间共享一个函数。

methods: {
  onChange(e) {
    this.$emit('change', e.target.value)
  }
},

created() {
  this.onChange = _.debounce(this.onChange, 1000)
}

这是一个有效示例:

new Vue({
  el: '#app',
  
  data: {
    text: '',
  },
  
  created() {
    this.onClick = _.debounce(this.onClick, 1000)
  },
  
  methods: {
    onClick() {
      // this is not undefined here
      this.text += 'Debounced! ';
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <button @click="onClick">Click Me</button>
  <p>{{ text }}</p>
</div>
Decade Moon
2020-05-29