当前位置:首页 > 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 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现list

vue实现list

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

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…