当前位置:首页 > VUE

vue实现阻塞

2026-03-07 11:24:09VUE

阻塞实现方法

在Vue中实现阻塞操作通常涉及同步代码执行、异步控制或界面交互阻断。以下是几种常见场景的实现方式:

同步阻塞

使用while循环或同步方法强制阻塞主线程(不推荐,会导致界面冻结):

function syncBlock(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {}
}
// 调用会冻结界面5秒
syncBlock(5000);

异步阻塞

通过Promise和async/await模拟非界面冻结的阻塞:

async function asyncBlock(ms) {
  await new Promise(resolve => setTimeout(resolve, ms));
}
// 使用方式
async function init() {
  console.log('开始阻塞');
  await asyncBlock(3000); // 阻塞3秒但不冻结界面
  console.log('阻塞结束');
}

界面交互阻断

通过v-loading或自定义模态框阻止用户操作:

<template>
  <div v-loading="isBlocking">内容区域</div>
  <button @click="startBlock">开始阻塞</button>
</template>

<script>
export default {
  data() {
    return { isBlocking: false }
  },
  methods: {
    async startBlock() {
      this.isBlocking = true;
      await new Promise(resolve => setTimeout(resolve, 2000));
      this.isBlocking = false;
    }
  }
}
</script>

路由阻塞

通过路由守卫实现导航阻断:

vue实现阻塞

router.beforeEach((to, from, next) => {
  if (shouldBlockNavigation) {
    next(false); // 取消导航
  } else {
    next();
  }
});

注意事项

  • 同步阻塞会直接冻结浏览器主线程,导致界面无响应
  • 异步阻塞需结合Promise或setTimeout实现非冻结等待
  • 对于用户交互阻断,推荐使用可视化反馈(如加载状态)
  • 路由级阻塞需谨慎使用,避免破坏用户体验

标签: vue
分享给朋友:

相关文章

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…