javascript - 这在Vue中是未定义的,使用debounce方法

标签 javascript vue.js lodash

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

返回 Cannot read property '$emit' of undefined

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

我在没有箭头符号的情况下编写这个去抖动函数的方式是否存在语法错误?

最佳答案

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

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

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>

关于javascript - 这在Vue中是未定义的,使用debounce方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62083244/

相关文章:

javascript - uniq 两个数组对象,且真值优先

javascript - 如何使用 Lodash 比较和查找两个复杂对象的差异?

javascript - 使用正则表达式掩码实时控制浮点输入

javascript - 如何将 ids 转换为 ng-option Angular 中的对象?

javascript - 是否有用于定义键盘快捷键的 JavaScript 库?

javascript - 如何为 Firebase 中的数组类型文档项分配时间戳

javascript - 如何从最左边的点开始获取 Highcharts X 轴类别

javascript - 带插槽的 Vue 表 2。如何将数据 ID 传递给事件处理程序?

javascript - Vuetify 扩展面板无法一次扩展一个

javascript - 如何使用 lodash.js 或 underscore.js 过滤 json?