gpt4 book ai didi

javascript - Vue v-if 在使用 interval 时不影响 Dom

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:57 24 4
gpt4 key购买 nike

我正在尝试使用 setInterval 进行轮询并使用 Vue 有条件地渲染一些元素。但它不起作用,所以我将数据设置为 true 但在 DOM 上什么也没发生。

P.S:我将 Vue.js 与 CDN 结合使用,因此我的应用不是使用 VueCLI 创建的。

这是我的 HTML:

<div id="app">
<div class="container">
<h1 v-if="showtext">
text
</h1>
</div>
</div>

这是我的脚本。当状态为 200 的响应到来时,我的数据将切换为 true。我可以在控制台上看到它,但我的文本没有在 DOM 上呈现。

var app = new Vue({
el: "#app",
data: {
polling: null,
showtext: false
},
methods: {
pollData() {
this.polling = setInterval(() => {
axios({
method: "get",
url: "https://jsonplaceholder.typicode.com/comments"
}).then(function(response) {
console.log(response);
if (response.status == 200) {
this.showtext = true
}
console.log(this.showtext)
});
}, 7000);
}
},
beforeDestroy() {
clearInterval(this.polling);
},
created() {
this.pollData();
},
});

最佳答案

你应该使用箭头函数来访问 vue 实例范围:

 then((response)=> { ...

或将 this 分配给全局变量,如下所示(这适用于旧浏览器):

    var that=this; ///<------ 
axios({
method: "get",
url: "https://jsonplaceholder.typicode.com/comments"
}).then(function(response) {
console.log(response);
if (response.status == 200) {
that.showtext = true
}
console.log(that.showtext)
});

完整运行示例:

Vue.config.devtools = false;
Vue.config.productionTip = false;

var app = new Vue({
el: "#app",
data() {
return{
polling: null,
showtext:false
}
},
methods: {
pollData() {
this.polling = setInterval(() => {
axios({
method: "get",
url: "https://jsonplaceholder.typicode.com/comments"
}).then((response)=> {

if (response.status == 200) {
this.showtext = true
}
console.log(this.showtext)
});
}, 4000);
}
},
beforeDestroy() {
clearInterval(this.polling);
},
created() {
this.pollData();
},
});
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://unpkg.com/vue-axios@2.1.4/dist/vue-axios.min.js"></script>
<div id="app">
<div class="container">
test:
<h1 v-if="showtext">
text
</h1>
</div>
</div>

关于javascript - Vue v-if 在使用 interval 时不影响 Dom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57209254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com