当前位置:首页 > VUE

vue 实现 confirm

2026-02-10 12:36:44VUE

Vue 实现 Confirm 弹窗

在 Vue 中实现 Confirm 弹窗可以通过以下几种方式:

使用第三方库

许多成熟的 UI 库如 Element UI、Ant Design Vue 等提供了现成的 Confirm 组件。

Element UI 示例:

this.$confirm('确认删除吗?', '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning'
}).then(() => {
  // 确认操作
}).catch(() => {
  // 取消操作
});

自定义组件实现

创建可复用的 Confirm 组件:

  1. 创建 Confirm.vue 组件:
    
    <template>
    <div class="confirm-modal" v-if="visible">
     <div class="confirm-content">
       <h3>{{ title }}</h3>
       <p>{{ message }}</p>
       <div class="confirm-buttons">
         <button @click="onCancel">{{ cancelText }}</button>
         <button @click="onConfirm">{{ confirmText }}</button>
       </div>
     </div>
    </div>
    </template>
export default { props: { visible: Boolean, title: String, message: String, confirmText: { type: String, default: '确定' }, cancelText: { type: String, default: '取消' } }, methods: { onConfirm() { this.$emit('confirm'); this.$emit('update:visible', false); }, onCancel() { this.$emit('cancel'); this.$emit('update:visible', false); } } } ```
  1. 全局注册为插件:
    
    // confirm-plugin.js
    import Vue from 'vue';
    import Confirm from './Confirm.vue';

const ConfirmPlugin = { install(Vue) { Vue.component('Confirm', Confirm);

Vue.prototype.$confirm = function(options) {
  return new Promise(resolve => {
    const ComponentClass = Vue.extend(Confirm);
    const instance = new ComponentClass({
      propsData: options
    });

    instance.$on('confirm', () => {
      resolve(true);
      instance.$destroy();
    });

    instance.$on('cancel', () => {
      resolve(false);
      instance.$destroy();
    });

    instance.$mount();
    document.body.appendChild(instance.$el);
  });
}

} };

Vue.use(ConfirmPlugin);


3. 使用方式:
```javascript
// 组件内使用
this.$confirm({
  title: '提示',
  message: '确认删除吗?'
}).then(confirmed => {
  if (confirmed) {
    // 执行删除操作
  }
});

使用 Promise 封装

简单场景可以直接用 Promise 封装浏览器原生 confirm:

function confirm(message) {
  return new Promise(resolve => {
    const result = window.confirm(message);
    resolve(result);
  });
}

// 使用
confirm('确认删除吗?').then(result => {
  if (result) {
    // 确认操作
  }
});

使用 Teleport(Vue 3)

Vue 3 可以使用 Teleport 实现弹窗:

vue 实现 confirm

<template>
  <button @click="showConfirm = true">删除</button>

  <Teleport to="body">
    <Confirm 
      v-if="showConfirm"
      @confirm="handleConfirm"
      @cancel="showConfirm = false"
    />
  </Teleport>
</template>

<script>
import { ref } from 'vue';
import Confirm from './Confirm.vue';

export default {
  components: { Confirm },
  setup() {
    const showConfirm = ref(false);

    const handleConfirm = () => {
      // 执行操作
      showConfirm.value = false;
    };

    return { showConfirm, handleConfirm };
  }
}
</script>

选择哪种实现方式取决于项目需求,简单项目可以使用原生 confirm 或第三方库,需要定制化则推荐自定义组件实现。

标签: vueconfirm
分享给朋友:

相关文章

vue 实现全选

vue 实现全选

Vue 实现全选功能 在 Vue 中实现全选功能通常需要结合复选框的状态管理,以下是几种常见的实现方式: 使用 v-model 绑定数组 通过 v-model 绑定一个数组来管理选中的项,全选时将该…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue 实现拖动

vue 实现拖动

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

vue实现mvvm

vue实现mvvm

Vue 实现 MVVM 模式 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 是其典型实现之一。MVVM 的核心是通过数据绑定和响应式系统实现视图与数据的自动同步。…

vue实现爬虫

vue实现爬虫

Vue 实现爬虫的基本思路 Vue.js 本身是一个前端框架,主要用于构建用户界面。要实现爬虫功能,通常需要结合后端技术或浏览器自动化工具。以下是几种常见的方法: 方法一:Vue + Node.js…