Vue使用Promise自定义confirm确认框组件
使用Promise模拟浏览器确认框,可自定义标题,内容,按钮文字和类型
| 参数名 | 类型 | 说明 | 
|---|---|---|
| title | String | 标题 | 
| content | String | 内容 | 
| yesBtnText | String | 确认按钮文字,默认‘确定’ | 
| cancelBtnText | String | 取消按钮文字,默认‘取消’ | 
| type | String | info/success/warning/error,默认‘’ | 
Confirm.vue
<template>
  <transition name="fade">
  <div class="confirm-wrap" v-if="visible">
    <div class="confirm">
      <div class="hd">
        {{title}}
        <i class="btn-close iconfont icon-close" @click="handleAction('close')"></i>
      </div>
      <div class="bd">
        <i v-if="type!=''" class="icon-type iconfont" :class="'icon-'+type"></i>{{content}}
      </div>
      <div class="ft">
        <a href="javscript:void(0)" class="btn btn-primary" @click="handleAction('yes')">{{yesBtnText}}</a>
        <a href="javscript:void(0)" class="btn btn-default" @click="handleAction('cancel')">{{cancelBtnText}}</a>
      </div>
    </div>
    <div class="backdrop" @click="handleAction('close')"></div>
  </div>
  </transition>
</template>
<script>
  export default {
    name: "MyConfirm",
    data() {
      return {
        visible:false,
        title:'',
        content:'',
        yesBtnText:'确定',
        cancelBtnText:'取消',
        type:'',
        promiseStatus:null,
      }
    },
    watch:{
      visible:function(curVal) {
        if(curVal&&document.body.scrollHeight > window.innerHeight){
          $('body').addClass('backdrop-open');
        }else{
          $('body').removeClass('backdrop-open');
        }
      }
    },
    methods: {
      confirm() {
        let _this = this;
        this.visible = true;
        return new Promise(function (resolve, reject) {
          _this.promiseStatus = {resolve, reject};
        });
      },
      handleAction(action){
        this.visible=false;
        if(action=='yes'){
          this.promiseStatus && this.promiseStatus.resolve();
        }else{
          this.promiseStatus && this.promiseStatus.reject();
        }
      }
    }
  }
</script>
index.js
import Vue from 'vue'
import Confirm from './Confirm.vue'
const ConfirmBox = Vue.extend(Confirm);
Confirm.install = (content, title, options) => {
  if (typeof title === 'object') {
    options = title;
    title = '';
  } else if (title === undefined) {
    title = '';
  }
  options = Object.assign({
    title: title,
    content: content,
  }, options);
  let instance = new ConfirmBox({
    data: options
  }).$mount();
  document.body.appendChild(instance.$el);
  return instance.confirm();
};
export default Confirmmain.js
import Confirm from '@/components/common/Confirm'
Vue.prototype.$my_confirm = Confirm.install;页面调用
show(){
    this.$my_confirm('是否登录?',{
        yesBtnText:'登录',
    }).then(() => {
        //点登录
    }).catch(() => {
        //点取消
    });
},
show1(){
    this.$my_confirm('此操作将永久删除该文件, 是否继续?','提示',{
        yesBtnText:'是',
        cancelBtnText:'否',
        type: 'warning'
    }).then(() => {
        //点是
    }).catch(() => {
        //点否
    });
},效果图: 
 
 

Vue使用Promise自定义confirm确认框组件的更多相关文章
- jquery mobile 实现自定义confirm确认框效果
		类似删除的效果,在执行之前,一般需要添加确认对话框,点确认的话执行,取消按钮就不执行,传统的js if(confirm('确定删除吗?')) { //执行代码 } 这种效果比较丑,使用jquery m ... 
- Combo( 自定义下拉框) 组件
		本节课重点了解 EasyUI 中 Combo(自定义下拉框)组件的使用方法,这个组件依赖于ValidateBox(验证框)组件 一. 加载方式自定义下拉框不能通过标签的方式进行创建.<input ... 
- 第二百一十二节,jQuery EasyUI,Combo(自定义下拉框)组件
		jQuery EasyUI,Combo(自定义下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Combo(自定义下拉框)组件的使用方 ... 
- vue自定义下拉框组件
		创建下拉框组件 Select.vue <template> <div class="selects"> <div :class="{sele ... 
- Vue 自定义全局消息框组件
		消息弹框组件,默认3秒后自动关闭,可设置info/success/warning/error类型 效果图: 文件目录: Message.vue <template> <transit ... 
- 关于隐式创建vue实例实现简化弹出框组件显示步骤
		我们在使用vue写alert组件的时候,经常是定义了一个alert.vue,然后引入alert.vue,然后配置参数等等,非常繁琐,那有没有一种方式可以像window.alert("内容&q ... 
- vue 自定义modal 模态框组件
		参数名 类型 说明 visible Boolean 是否显示,默认false title String 标题 update:visible Boolean 更新visible, 使用:visible. ... 
- 怎样在 Vue 里面使用自定义事件将子组件的数据传回给父组件?
		首先, Vue 里面的组件之间的数据流动是 单向 的, 数据可以从父组件传递给子组件, 但不能从子组件传递给父组件, 因为组件和组件之间是 隔离 的. 就像两个嵌套的 黑盒子 . 能通过 props ... 
- vue 路由跳转前确认框,刷新浏览器页面前提示确认框
		先看效果图: 1.刷新页面效果: 2.跳转路由(进入别的页面前)效果: 代码: // 路由跳转确认 beforeRouteLeave(to, from, next) { const answer = ... 
随机推荐
- 分享一个js对象开发组件写法
			var TextCount = (function(){ //私有方法,外面将访问不到 var _bind = function(that){ that.input.on('keyup',functi ... 
- LINUX中,find结合grep正则表达式,快速查找代码文件。
			###目的###LINUX中,find结合grep正则表达式快速查找代码. 例如经常有需求:查找当前目录下所有.h文件中,"public开头,中间任意字符,以VideoFrameReceiv ... 
- "getElementsByClassName is not a function" 报错原因
			element.getElementsByClassName(""): 返回的含有该类的子元素数组,除了子元素以外的后代元素是获取不到的.要遍历使用,或者.element.getE ... 
- JS取出两个数组的不同或相同元素
			JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ... 
- @Accessors
			@Accessors 作用:存取器,用于配置getter和setter方法的生成结果 三个属性:fluent.chain.prefix 1.fluent:流畅的,设置为true,getter和sett ... 
- Spring : 征服数据库(一)
			严格的说.这里征服的是关系型数据库.之后笔者会以MongoDB为例,给出非关系型数据库的解决方式,敬请期待. 获取连接,操作,关闭,不知所云的异常...是的,你受够了.在使用纯JDBC时你訪问数据库时 ... 
- jQuery Easy UI ProgressBar(进度条)组件
			ProgressBar(进度条)组件,这个还是挺好玩的.我们在自己做点什么的时候常常能用到,比方上传下载文件.导入导出文档啊.加载网页等等. 应用场景非常多,使用起来还非常easy. 演示样例: &l ... 
- pix格式的摸索(二)
			作者:朱金灿 来源:http://blog.csdn.net/clever101 PCI的系统格式pix是一个设计很巧妙的遥感图像格式,而且其设计巧妙之处不止一处两处,这些都有待我日后一一去摸索.今天 ... 
- class的写法
			java中class的写法:1.public class xxx{}2.非public类:public class A{}public class B{}必须保证一个其中一个类名是public并与ja ... 
- 2017国家集训队作业[agc016e]Poor Turkey
			2017国家集训队作业[agc016e]Poor Turkey 题意: 一开始有\(N\)只鸡是活着的,有\(M\)个时刻,每个时刻有两个数\(X_i,Y_i\),表示在第\(i\)个时刻在\(X_i ... 
