当前位置:首页 > VUE

vue实现阻塞

2026-03-07 11:24:09VUE

阻塞实现方法

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

同步阻塞

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

vue实现阻塞

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

异步阻塞

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

vue实现阻塞

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>

路由阻塞

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

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

注意事项

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

标签: vue
分享给朋友:

相关文章

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…