Nativescript-изменение значения vue после тайм-аута

#android #typescript #nativescript #nativescript-vue

#Android #машинописный текст #нативный скрипт #nativescript-vue #typescript

Вопрос:

Я хочу изменить (сбросить) свойство данных через определенное время. Моя попытка привела к ошибке типа: Cannot set property 'showSuccessPopover' of undefined Это код:

 data() {
        return {
           showSuccessPopover: false,
        }
    },   
methods: {
    evaluateAnswer():void{
    //fancy evaluationstuff happening
    showSuccessPopover = true;
            //reset popover after 2s
            setTimeout(function() {
                this.showSuccessPopover = false;
            }, 2000);
    }
}
  

Я больше знаком с JAVA, чем с typescript, поэтому я предполагаю, что внутри Java выполняется sleep или что-то подобное внутри другого потока, поэтому он прерывается при попытке получить доступ к showSuccessPopover сам по себе (потому что поле не существует внутри объекта thread) — это только мое предположение о том, что происходит, пожалуйста, не стесняйтесь поправлять меня, если что-то отличается, я действительно хотел бы знать.
И способ, как решить мою проблему, конечно;)
Заранее спасибо!

Ответ №1:

Это произошло потому, что внутри a function() ключевое слово this ссылается на саму функцию (которая может быть объектом), значение которой не определено, чтобы ссылаться на ее непосредственного родителя (который является нужным нам экземпляром vue), вам нужно преобразовать его в функцию со стрелкой следующим образом

 <!-- language: lang-js -->
setTimeout(() =>{
    this.showSuccessPopover = false;
}, 2000);
  

Также здесь есть полезный ресурс для JavaScript с некоторыми из лучших статей и упражнений, с которыми я сталкивался.