Что не так с Vue и Lodash Debounce?

1

Опоры:

props: {
  delay: Number,
}

Наблюдатель:

 watch: {
   q: _.debounce(function() {
     console.log(this.delay);      // 500; always works fine, this.delay is here
   }, this.delay)                  // never works; 
 },

Если hardcode задерживается (установите 500 вместо this.delay - он работает, в противном случае - функция не debounce).

Что я делаю неправильно? Благодарю.

  • 0
    Вы пробовали, что происходит, когда вы определяете функцию как наблюдатель для q, которая делает self = this и передает self.delay в качестве аргумента?
  • 0
    watch: {q: function () {let self = this; _.debounce (function () {console.log (self.delay);}, self.delay)}}, - не работает вообще
Теги:
vue.js
lodash

1 ответ

2
Лучший ответ

Вы не сможете установить delay там. this не компонент в этой области. Вместо этого вы можете использовать $watch вместо крючка жизненного цикла:

created () {
  this.debounceUnwatch = this.$watch('q', _.debounce(
    this.someMethod,
    this.delay
  ))
},

destroyed () {
  // Removed the watcher.
  this.debounceUnwatch()
},

Для получения дополнительной информации: https://vuejs.org/v2/api/#vm-watch

редактировать

Это тоже не работает. Казалось, что это действительно так. Я думаю, что здесь нужно сделать вывод, что вам нужно отказаться от того, что обновляет q а не q.

  • 0
    Благодарю. Но почему this функция доступна внутри функции, которая передается в _.debounce, если она не находится в области видимости?
  • 0
    Лодаш обрабатывает это для вас.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню