javascript - 从 vueJS 方法调用的 setTimeout() 不起作用

标签 javascript methods vue.js

我正在尝试允许用户从应用程序重置或关闭给定服务器。我现在正在处理界面,并希望向用户提供有关正在发生的事情的消息。我显示在我的数据对象中定义的消息以指示所采取的操作。然后我使用 setTimeout 来切换重置....消息和重置消息。看下面的方法。

    systemReset: function(){
            this.message = this.server + ': Resetting';
            setTimeout(function(){
                this.message = this.server + ': Reset';
            }, 2000);

    } 

在我的浏览器中,我可以触发此消息并显示我的“重置”消息,但永远不会输出以下“重置”消息。我有任何格式错误吗?

将此方法放在上下文中是我的整个组件。

  <template>
    <div>
      <p>{{message}}</p>
      <button @click="systemReset">Reset Server</button>
      <button @click="systemPowerDown">Poweroff Server</button>
    </div>
  </template>

  <script type="text/javascript">
    export default{
      data: function(){
        return{
          message: ''
        }
      },
      methods: {
        systemPowerDown: function(){
            this.message = this.server + ': Server Down';
        },
        systemReset: function(){
            this.message = this.server + ': Resetting';
            setTimeout(function(){
                this.message = this.server + ': Reset';
            }, 2000);
         }
      },
      props: ['server']
    }
  </script>

Am I missing something obvious?  Or is there some vue limitation I am unaware of?  

最佳答案

this的值在setTimeout中是不同的。

如果你使用的是 ES6,你可以使用箭头函数:

setTimeout(() => { this.message = this.server + ': Reset' }, 2000)

或者如果你不是,你可以绑定(bind)this的值:

setTimeout(function () {
  this.message = this.server + ': Reset'
}.bind(this))

但是,由于从未使用过 Vue,我不知道当您更改 this.message 的值时它是否会知道重新渲染,或者您是否应该更改某些组件状态或一些东西。

关于javascript - 从 vueJS 方法调用的 setTimeout() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301063/

相关文章:

javascript - 为什么在 ES6 中不使用绑定(bind)到它的类创建的对象的方法?

java - 在java中将一本书的多个值添加到ArrayList中

javascript - 处理 promise 在 promise.all() 中单独解决

javascript - 在 Firefox for Android 的 onload 事件期间 window.innerWidth 的值错误?

ruby - 使用 Integer 类和多种方法将 Integer 转换为 Octal

javascript - Vue.js 打印原始 html 并调用组件方法

javascript - 无法读取未定义的属性 '$nuxt'

javascript - JSON.stringify 抛出 RangeError : Invalid string length for huge objects

javascript - 如何在IE中先加载js文件再加载html?

javascript - 如何在 Vue 中仅使 Accordion 的一项处于事件状态?