У меня есть приложение Vue 2, которое использует массив объектов для поддержки виджета поиска / множественного выбора, предоставляемого vue-multiselect < / а>.
Я просмотрел руководство по миграции Vue 1 -> 2 на противодействие вызовам, но в приведенном ими примере не распространяются аргументы из элементов DOM в бизнес-логику.
Прямо сейчас select запускает события изменения при каждом нажатии клавиши, но я хотел бы задросселировать это (например, с lodash # throttle), поэтому я не нажимаю свой API каждые несколько миллисекунд, пока они печатают.
import {mapGetters} from 'vuex';
import { throttle } from 'lodash';
import Multiselect from 'vue-multiselect'
export default {
components: {
Multiselect
},
data() {
return {
selectedWork: {},
works: [],
isLoading: false
}
},
computed: {
...mapGetters(['worksList']),
},
methods: {
getWorksAsync: throttle((term) => {
// the plan is to replace this with an API call
this.works = this.worksList.filter(work => titleMatches(work, term));
}, 200)
}
}
Проблема: когда пользователь вводит текст в поле выбора, я получаю сообщение об ошибке:
TypeError: Cannot read property 'filter' of undefined
что происходит потому, что this.worksList
undefined
внутри функции throttle
.
Любопытно, что когда я использую отладчик инструментов разработчика, this.worksList
имеет значение, которое мне нужно разыменовать, а this
относится к компоненту Vue.
В настоящее время я не вызываю API из компонента, но проблема остается прежней:
- Как я могу ограничить этот вызов и получить правильный
this
контекст для обновления моегоthis.works
списка? РЕДАКТИРОВАТЬ: это объясняется в Vue Watch не запускается при использовании axios - Мне также нужно захватить строку запроса пользователя из виджета с множественным выбором для перехода к вызову API.
Каков правильный шаблон в Vue 2?
function
) такая же, как и в проблеме, на которую вы ссылались. Однако проблема получения значения строки запроса из пользовательского интерфейса, когда оно не привязано к модели, была дополнительной проблемой. Может быть, это две разные проблемы, но казалось, что это потенциально та ситуация, в которой могут оказаться другие. - person Matt Morgan   schedule 23.04.2018