@Dmi3ii

Axios во vuejs. Проблема с областью видимости?

Добрый день.

Делаю поиск. Использую vue и axios. Требуется, чтоб запрос отправился по окончанию ввода. Нашел решение, как сделать это через setTimeout, теперь абсолютно запутался, как вернуть результат запроса в свойство компонента:

<script>
    import axios from 'axios'

    export default {
        data: function () {
            return {
                <...>
                inputString: "",
                telbook: [],
                <...>
            };
        },
        computed:{
            translateSearch: function () {
                <...>
                if (this.inputString.length < 2) {
                    this.doSearch(this.inputString);
                }
                return this.inputString;
            },
        },
        methods:{
            doSearch: function (searchString) {
                window.clearTimeout(this.timeout);
                this.timeout = window.setTimeout(function () {
                    axios.get('http://teldistr/search.php', {params: {
                        search_string: searchString,
                    }}).then((response) => {
                        // ВОПРОС:
                        // как передать ответ сервера в this.telbook???
                        this.telbook = response.data
                    }), (error) => {
                        console.log(error)
                    }
                    console.log(response);
                }, 400)
            }
        }
    }
</script>

Помогите, пожалуйста, джуниору
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
amux
@amux
alp.ac
Просто используйте также стрелочную функцию в timeout, тогда this будет виден.

this.timeout = window.setTimeout(() => {
  //function body
});


либо
let self = this; //за пределами блока

//...

self.telbook = response.data //внутри блока
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы