首页 > 其他分享 >vue常用组件之confirm用法及说明

vue常用组件之confirm用法及说明

时间:2023-04-17 18:57:27浏览次数:42  
标签:vue confirm instance dialog 组件 div class

vue常用组件之confirm用法及说明
原文链接:https://www.jb51.net/article/263587.htm

+
目录

vue组件之confirm

一些自带的方法,比如alert,confirm等,往往由于浏览器不同而展现出不同的样式,为了统一,我们可以自己实现简单封装,下面代码是vue的一个组件,它简单实现了confirm功能。

代码如下:

?
12345678910111213141516171819202122232425262728293031323334<!-- * * 确认对话框 *  * 使用方法: * <dialogConfirm :show-dialog="showDialog" :ok-text="'删除'" :cancel-text="'取消'" :content="'content'" v-on:confirm="confirmFn" v-on:cancel="cancelFn" :hide-confirm="false"></dialogConfirm> * * show-dialog: 是否显示对话框,布尔值   * ok-text: 确认按钮文字,默认为‘好'       * cancel-text: 取消按钮文字,默认为‘取消' * hideConfirm: 是否隐藏删除按钮 * hideCancle 是否隐藏取消按钮 * content: 对话框文字  * confirmFn: 确定按钮回调 * cancelFn: 取消按钮回调 -->  <template>    <div class="dialog" v-if="showDialog">        <transition name="dialog-fade">            <div class="dialog-bg" v-if="showDialog" @click="confirmHide"></div>        </transition>          <transition name="dialog-show">            <div class="dialog-box" v-if="showDialog">                <div class="dialog-main" v-html="content"></div>                <div class="dialog-button">                    <div class="dialog-confirm-cancel" @click="clickCancel" v-if="!hideCancle">{{cancelText || '取消'}}</div>                    <div class="dialog-confirm-button" @click="clickConfirm" v-if="!hideConfirm">{{okText || '好'}}</div>                </div>            </div>        </transition>    </div></template>
?
12345678910111213141516171819<script>    export default{        data(){            return{}        },        props: ['showDialog','content','okText','cancelText','hideConfirm','hideCancle'],        methods: {            clickCancel() {                this.$emit('cancel');            },            clickConfirm() {                this.$emit('confirm');            },            confirmHide(){                this.$emit('confirmhide')            }        }    }</script>
?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071<style lang="sass" rel="stylesheet/scss">  .dialog {    position: fixed;    top: 0; left: 0;    width: 100%;    height: 100%;    z-index: 100;         &-bg {        position: absolute;        top: 0; left: 0;        width: 100%;        height: 100%;        background-color: rgba(0,0,0,.4);    }      &-box {        width: 5.6rem;        position: absolute;        top: 40%;        left: 50%;        -webkit-transform: translate3d(-50%,-50%,0);        transform: translate3d(-50%,-50%,0);        background-color: #fff;        border-radius: .1rem;        line-height: 1.5;        text-align: center;    }    &-main {        padding: .42rem .38rem .4rem;        text-align: left;        font-size: .28rem;        color:#333;    }    &-button {         overflow: hidden;        border-top: 1px solid #EEE;        font-size: .32rem;        line-height: .88rem;        display: flex;    }      &-confirm {        &-cancel {            color: #3ba3f2;            flex:1;            border-right: 1px solid #EEE;            margin-right: -1px;        }        &-button {            flex:1;            color: #3ba3f2;        }    }      .dialog-show-enter-active, .dialog-fade-enter-active {        transition: all .3s ease;    }    .dialog-show-leave-active, .dialog-fade-leave-active {        transition: all .3s ease;    }    .dialog-show-enter, .dialog-show-leave-active {        top: -35%;    }    .dialog-fade-enter, .dialog-fade-leave-active {        opacity: 0;    }}      </style>

vue自定义confirm弹窗(全局组件)

全局组件方式

全局组件方式采用在main.js文件中进行全局注册的方式

首先创建mmtoast.vue组件,自定义弹窗的样式。

?
12345678910<template>  <div class="quit_box" v-show="visible">    <div class="topBox">      <span class="tip">提示</span>    </div>    <div class="quit_title">{{message}}</div>    <button class="cancel_btn" @click="leftClick">取消</button>    <button class="confirm_btn" @click="rightClick">确认</button>  </div></template>
?
1234567891011121314151617<script>export default {  name: "mmtoast",  data() {    return {      visible: false,      message:''    };  },  methods: {    leftClick() {    },    rightClick() {    },  },};</script>

接下来创建index.js文件编写原生的JS代码进行动态自定义弹窗的插入

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import MmToast from './mmtoast.vue'  let instancelet showToast = falseconst mmToast = {    install(Vue, options = {}) {        let opt = MmToast.data() // 获取组件中的默认配置        Object.assign(opt, options) // 合并配置,最终返回opt以一个对象的形式        Vue.prototype.$mmToast = (message) => {            return new Promise((resolve, reject) => {                if (message) {                    opt.message = message // 如果有传message,则使用所传的message                }                /*                     解决如何把toast里面的template放到body里面,这个时候就可以用到el这个属性,                    但是如果直接把toast组件里面的el这个属性,再安装插件的时候赋给body是没有用的,这个时候toast还没有渲染出来,那么如何解决呢                    就是install方法里面来手动挂载组件,创建一个构造器,然后new那个构造器,                    创建出一个组件对象,然后把这个对象挂载到一个div那里,然后才把内容赋给body,做好把这个构造出来的对象付给原型                 */                let TempToastConstructor = Vue.extend(MmToast) // 创建一个TempToastConstructor组件                  instance = new TempToastConstructor({                    data: opt                })                instance.vm = instance.$mount()                //没有挂载到任何文档中,模板将被渲染为文档之外的的元素,并且你必须使用原生DOM API把它插入文档中。该方法返回实例自身。                // console.log(instance.vm === instance)  // 输出为true                document.body.appendChild(instance.vm.$el)//el对应的就是组件的dom元素                instance.vm.visible = showToast = true                    instance.rightClick = function () {                    resolve()                    instance.vm.visible = showToast = false                }                  instance.leftClick = function () {                    reject()                    instance.vm.visible = showToast = false                }              })        }    }}export default mmToast

在mian.js中进行全局组件的注册

?
12import mmToast from '../src/components/mmtoast/index.js'Vue.use(mmToast)

接下来在自己的组件中进行引入

?
123456789   this.$mmToast("此操作将永久删除该文件, 是否继续?")        .then(() => {          this.historyList = [];          localStorage.setItem("placeHistory", null);          console.log("删除成功啦!");        })        .catch(() => {          console.log("取消删除啦");        });

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

标签:vue,confirm,instance,dialog,组件,div,class
From: https://www.cnblogs.com/sunny3158/p/17326801.html

相关文章

  • vue3微信公众号商城项目实战系列(6)用户登录
    1.一个商城要实现购物的功能,需要能识别用户的身份,这样才能完成加购物车,下单,付款等操作。但微信公众号商城和PC端商城有些不一样,区别在于微信公众号商城使用微信支付的时候需要一个openid的参数(以后再具体讲)这个参数必须访问微信公众号提供的接口才能获取到,基于这个原因,用户登录......
  • Vue3 ref函数处理基本类型或对象类型
    基本类型视频对象类型视频2.ref函数作用:定义一个响应式的数据语法:constxxx=ref(initValue)创建一个包含响应式数据的引用对象(reference对象,简称ref对象)。JS中操作数据:xxx.value模板中读取数据:不需要.value,直接:<div>{{xxx}}</div>备注:接收的数据可以是:基本......
  • vue插槽
    我们经常会有封装组件的需求,组件需要的往往不只有数据,有时候我们要给一个模块做内容方面的可自定义,比如我封装了一个黑板,但是我有时希望上面是字,又有时希望上面是图画,这就要用到插槽了一.插槽的基本用法子组件<template><el-row><slot></slot></el-ro......
  • 使用vue-cli创建第一个vue项目
    命令提示符切换至需要创建项目的目录:直接在路径输入cmd在按键盘的enter键打开的终端就直接切换到该目录下(1)输入以下命令:vuecreate项目名称(2)我这里选手动选择,键盘上下按钮,选完后按enter键(3)我这里选Babel和CSS,键盘上下按钮,选中或取消选中按空格,选完后按enter键(4)我这里选......
  • vue登录路由权限管理
    前言在开发Web应用程序时,常常需要进行登录验证和权限管理。Vue是一款流行的JavaScript框架,提供了一套灵活的路由管理工具,可以方便地实现登录路由权限管理。本篇博客将介绍如何使用Vue来实现这些功能。登录验证首先,我们需要在Vue应用程序中对用户进行登录验证。在Vue中,我们可以通......
  • vscode调试 vue
    1.配置vue.config.js加上devtool:'source-map'//开发环境可以加,生产环境,别人可以看到源代码,不完全不要加 2.添加launch.jsonvscode打开调试窗口,在下图箭头指向的位置点击打开配置文件launch.json:   3.配置远程调试1)浏览器快捷方式设置浏览器桌面快捷方式......
  • vue全家桶进阶之路32:Vue3 WatchEffect和watch 监听
    在Vue3中,watchEffect是一个用于监听响应式数据变化的API。它可以在函数内部自动跟踪数据的依赖,并在依赖变化时重新运行函数。watchEffect 的作用以及各个参数的功能讲解:watchEffect(effect:(onInvalidate:InvalidateCbRegistrator)=>void|(()=>void)|Promise<vo......
  • LABjs异步加载组件
    加载外部js的方法大致有这么几种:方法说明XHREval     通过Ajax方式获取代码,并通过eval方式执行代码。XHRInjection     通过Ajax方式获取代码,并在页面上创建一个script元素,将Ajax取得的代码注入。ScriptinIframe      通过iframe加载js。Scr......
  • vuex的使用
    目录简介vuex的环境调用逻辑定义vuex中的内容简介官网:https://vuex.vuejs.org/zh/在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。Vuex是一个专为Vue.js应用程序开发......
  • Vue - watcher原理
    原理Watcher原理是先把自己设置到全局唯一指定的位置(window.target),然后读取数据。因为读取了数据,所以会触发这个数据的getter。然后在getter中就会从全局唯一的那个位置读取真正读取数据的watcher,并把这个watcher收集到Dep中去。通过这样的方式,watcher可以主动去订阅任意一个数......