vue.js - 如何通过计时器从 v-for 中删除?
问题描述
让我询问有关如何正确添加/删除/恢复信使计时器的建议。
也就是说,消息应该在创建后 5s 被删除,但是如果 mouseenter 计时器被重置/mouseleave 被恢复
信使代码
<!DOCTYPE html>
<header>
<script src="https://unpkg.com/vue@next"></script>
</header>
<body>
<div class="messenger" id="app">
<div v-for="[key, msg] in messages" :key="key" @click="messages.delete(key)">
{{ msg }}
</div>
</div>
</body>
<script>
const app = {
data() {
return {
messages: new Map([[0, "sdf"]]),
i: 0,
};
},
mounted() {
window.authorizationMessage = function (msg) {
this.messages.set(++this.i, msg);
}.bind(this);
},
}
Vue.createApp(app).mount('#app')
</script>
我想既然我需要能够删除计时器 - 那么我需要一个计时器数组,但我从未实现过这样的东西,你将如何解决这个问题))?
解决方案
用于setTimeout
创建 5 秒超时以自动销毁项目。每当你鼠标悬停时,使用clearTimeout
并创建一个新的:)
<template>
<div class="messenger" id="app">
<div v-for="(key, msg) in messages" :key="key" @click="delete(key)" @mouseover="resetTimer(key)">
{{ msg }}
</div>
</div>
</template>
<script>
const app = {
data() {
return {
messages: {
key1: { msg: 'hello', timer: setTimeout(this.delete(key1), 5 * 1000) }
},
i: 0,
};
},
mounted() {
window.authorizationMessage = function (msg) {
this.messages.set(++this.i, msg);
}.bind(this);
},
methods: {
resetTimer(key) {
clearTimeout(this.messages[key].timer)
this.messages[key].timer = setTimeout(this.delete(key), 5 * 1000)
},
delete(key) {
delete this.messages[key]
}
}
}
</script>
推荐阅读
- amazon-web-services - 在 AWS 本地区域中使用 Terraform 启动 EIP
- r - blogdown serve_site() 无法渲染 keras 包中的任何函数
- reactjs - 如何在 react-native 中将参数传回 BackHandler 上的父屏幕?
- sql-server - 如何使用子查询插入临时表并从临时表中选择
- java - spring security permitAll() 不适用于 JWT 身份验证过滤器
- python - 如何从张量中获取预测输出
- django - 如何在生产 Pythonanywhere 中运行 WebSocket(django-channels)?
- android - 在模块化架构中添加依赖项后,Android Studio 冻结
- swift - 检查菜单栏应用程序上的按键
- javascript - Websockets 在客户端发送多个事件和多个事件处理程序