vue實(shí)現(xiàn)自定義"模態(tài)彈窗"組件實(shí)例代碼
前言
對(duì)話框是很常用的組件 , 在很多地方都會(huì)用到,一般我們可以使用自帶的alert來彈出對(duì)話框,但是假如是設(shè)計(jì)出的圖該怎么辦呢 ,所以我們需要自己寫一個(gè)對(duì)話框,下面來一起看看詳細(xì)的實(shí)現(xiàn)過程。
效果圖
以上截圖,紅色邊框部分,表示 “文字、圖標(biāo)或者圖片” 是可更改部分
實(shí)例代碼
一、創(chuàng)建彈窗組件 quitDialog.vue 組件
<template> <transition-group name='fade'> <!-- 退出彈窗 --> <div class="quit_dialog" key="1" @click="isQuit = false" v-if="isQuit" @touchmove.prevent> </div> <div class="quit_box" v-show="isQuit" key="2"> <img :src="imgUrl" :alt="imgLoadTip"> <div class="quit_title">{{title}}</div> <p>{{content}}</p> <button class="quit_btn" @click="leftClick">{{btnText}}</button> <button class="quit_close" @click="rightClick">{{rightText}}</button> </div> </transition-group> </template> <script> export default { name: 'Popup', data () { return { isQuit: false, imgUrl: '', title: '', content: '', btnText: '', rightText: '' } }, methods: { leftClick () { this.leftBtn() this.isQuit = false }, rightClick () { this.rightBtn() this.isQuit = false } } } </script> <style lang="scss" scoped> // 退出彈窗 .fade-enter, .fade-leave-active { opacity: 0; } .fade-enter-active, .fade-leave-active { transition: opacity 0.35s; } // 全局彈窗 .quit_dialog { background: rgba(0,0,0,.5); position: fixed; top: 0; left: 0; height: 100%; width: 100%; z-index: 10000; } .quit_box { width: 700px; background: #fff; position: fixed; top: 50%; left: 50%; margin-left: -350px; margin-top: -190px; z-index: 10001; border-radius: 10px; text-align: center; padding: 50px; img{ width: 80px; } .quit_title{ color: #666; font-size: 28px; margin: 45px 0px; } button { border-radius: 32px; padding:20px 0px; font-size: 26px; border-radius: 8px; width: 214px; } .quit_btn{ color: #03BA82; background: #fff; border: 1px solid #03BA82; margin-right: 32px; } .quit_close { background: linear-gradient(0deg, #03BA82, #01D695); box-shadow: 0px 3px 4px 0px rgba(1, 84, 58, 0.27); border: 1px solid #03BA82; color: #fff; } } </style>
二、創(chuàng)建 graspDialog.js
import Vue from 'vue' import Grasp from '../components/QuitDialog/QuitDialog' const PopupBox = Vue.extend(Grasp) Grasp.install = function (data) { let instance = new PopupBox({ data }).$mount() document.body.appendChild(instance.$el) Vue.nextTick(() => { instance.isQuit = true // isQuit 和彈窗組件里的isQuit對(duì)應(yīng),用于控制顯隱 }) } export default Grasp
三、在全局 main.js 引入
import Vue from 'vue' import Popup from './api/quitDialog' Vue.prototype.$popup = Popup.install
四、頁面中調(diào)用,只需在函數(shù)中調(diào)用即可
methods: { graspBtn () { this.$grasp({ imgUrl: require('../../assets/home/quits.png'), // 頂部圖片. imgLoadTip: '圖片加載中...', content: '溫馨提示', title: '注意:該學(xué)習(xí)任務(wù)未完成,是否確認(rèn)退出', btnText: '殘忍退出', rightText: '繼續(xù)學(xué)習(xí)', // 左邊點(diǎn)擊事件 leftBtn: () => { this.$store.dispatch('user/logout').then(() => { this.$signalr.LogoutPad() this.$signalr.SendMsg(2, 0, '退出系統(tǒng)') this.$router.push('/login') }) }, // 右邊點(diǎn)擊事件 rightBtn: () => {} }) } }
總結(jié)
到此這篇關(guān)于vue實(shí)現(xiàn)自定義"模態(tài)彈窗"組件的文章就介紹到這了,更多相關(guān)vue自定義"模態(tài)彈窗"組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2 mint-ui loadmore實(shí)現(xiàn)下拉刷新,上拉更多功能
這篇文章主要介紹了vue2 mint-ui loadmore實(shí)現(xiàn)下拉刷新,上拉更多功能,需要的朋友可以參考下2018-03-03vue做網(wǎng)頁開場(chǎng)視頻的實(shí)例代碼
這篇文章主要介紹了vue做網(wǎng)頁開場(chǎng)視頻的實(shí)例代碼,需要的朋友可以參考下2017-10-10VueCLI通過process.env配置環(huán)境變量的實(shí)現(xiàn)
本文主要介紹了VueCLI通過process.env配置環(huán)境變量的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Vue源碼之關(guān)于vm.$delete()/Vue.use()內(nèi)部原理詳解
這篇文章主要介紹了Vue源碼之關(guān)于vm.$delete()/Vue.use()內(nèi)部原理詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05vue3利用v-model實(shí)現(xiàn)父子組件之間數(shù)據(jù)同步的代碼詳解
在Vue 3中,v-model這一指令也得到了升級(jí),使得父子組件之間的數(shù)據(jù)同步變得更加容易和靈活,本文將探討一下Vue 3中如何利用v-model來實(shí)現(xiàn)父子組件之間的數(shù)據(jù)同步,需要的朋友可以參考下2024-03-03