我正在尝试允许用户从应用程序重置或关闭给定服务器。我现在在界面上工作,并希望向用户提供有关正在发生的事情的消息。我显示在我的数据对象中定义的消息,以指示所采取的操作。我使用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?
答案 0 :(得分:7)
this
内的setTimeout
值不同。
如果您使用的是ES6,则可以使用箭头功能:
setTimeout(() => { this.message = this.server + ': Reset' }, 2000)
如果不是,您可以绑定this
:
setTimeout(function () {
this.message = this.server + ': Reset'
}.bind(this))
但是,从未使用过Vue,我不知道在更改this.message
的值时是否知道要重新渲染,或者是否应该更改某些组件状态等。
答案 1 :(得分:1)
因为您在setTimeout
内,this
与您的Vue实例不对应。您可以改为使用self
:
systemReset: function(){
this.message = this.server + ': Resetting';
var self = this;
setTimeout(function(){
self.message = self.server + ': Reset';
}, 2000);
}
答案 2 :(得分:1)
可以解决将this
存储在超时函数中的变量中吗?
像这样:
systemReset: function(){
var $this = this;
$this.message = this.server + ': Resetting';
setTimeout(function(){
$this.message = this.server + ': Reset';
}, 2000);
}
这样做是指正确的函数systemReset