最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue常用組件之confirm用法及說(shuō)明

 更新時(shí)間:2022年09月23日 14:26:44   作者:wh_xmy  
這篇文章主要介紹了vue常用組件之confirm用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue組件之confirm

一些自帶的方法,比如alert,confirm等,往往由于瀏覽器不同而展現(xiàn)出不同的樣式,為了統(tǒng)一,我們可以自己實(shí)現(xiàn)簡(jiǎn)單封裝,下面代碼是vue的一個(gè)組件,它簡(jiǎn)單實(shí)現(xiàn)了confirm功能。

代碼如下:

<!--
 *
 * 確認(rèn)對(duì)話框
 * 
 * 使用方法:
 * <dialogConfirm :show-dialog="showDialog" :ok-text="'刪除'" :cancel-text="'取消'" :content="'content'" v-on:confirm="confirmFn" v-on:cancel="cancelFn" :hide-confirm="false"></dialogConfirm>
 *
 * show-dialog: 是否顯示對(duì)話框,布爾值  
 * ok-text: 確認(rèn)按鈕文字,默認(rèn)為‘好'      
 * cancel-text: 取消按鈕文字,默認(rèn)為‘取消'
 * hideConfirm: 是否隱藏刪除按鈕
 * hideCancle 是否隱藏取消按鈕
 * content: 對(duì)話框文字 
 * confirmFn: 確定按鈕回調(diào)
 * cancelFn: 取消按鈕回調(diào)
 -->
 
<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>
 
<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>
<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文件中進(jìn)行全局注冊(cè)的方式

首先創(chuàng)建mmtoast.vue組件,自定義彈窗的樣式。

<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">確認(rèn)</button>
? </div>
</template>
<script>
export default {
? name: "mmtoast",
? data() {
? ? return {
? ? ? visible: false,
? ? ? message:''
? ? };
? },
? methods: {
? ? leftClick() {
? ? },
? ? rightClick() {
? ? },
? },
};
</script>

接下來(lái)創(chuàng)建index.js文件編寫原生的JS代碼進(jìn)行動(dòng)態(tài)自定義彈窗的插入

import MmToast from './mmtoast.vue'
?
let instance
let showToast = false
const mmToast = {
? ? install(Vue, options = {}) {
? ? ? ? let opt = MmToast.data() // 獲取組件中的默認(rèn)配置
? ? ? ? Object.assign(opt, options) // 合并配置,最終返回opt以一個(gè)對(duì)象的形式
? ? ? ? Vue.prototype.$mmToast = (message) => {
? ? ? ? ? ? return new Promise((resolve, reject) => {
? ? ? ? ? ? ? ? if (message) {
? ? ? ? ? ? ? ? ? ? opt.message = message // 如果有傳message,則使用所傳的message
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? /*?
? ? ? ? ? ? ? ? ? ? 解決如何把toast里面的template放到body里面,這個(gè)時(shí)候就可以用到el這個(gè)屬性,
? ? ? ? ? ? ? ? ? ? 但是如果直接把toast組件里面的el這個(gè)屬性,再安裝插件的時(shí)候賦給body是沒(méi)有用的,這個(gè)時(shí)候toast還沒(méi)有渲染出來(lái),那么如何解決呢
? ? ? ? ? ? ? ? ? ? 就是install方法里面來(lái)手動(dòng)掛載組件,創(chuàng)建一個(gè)構(gòu)造器,然后new那個(gè)構(gòu)造器,
? ? ? ? ? ? ? ? ? ? 創(chuàng)建出一個(gè)組件對(duì)象,然后把這個(gè)對(duì)象掛載到一個(gè)div那里,然后才把內(nèi)容賦給body,做好把這個(gè)構(gòu)造出來(lái)的對(duì)象付給原型?
? ? ? ? ? ? ? ? */
? ? ? ? ? ? ? ? let TempToastConstructor = Vue.extend(MmToast) // 創(chuàng)建一個(gè)TempToastConstructor組件
?
? ? ? ? ? ? ? ? instance = new TempToastConstructor({
? ? ? ? ? ? ? ? ? ? data: opt
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? instance.vm = instance.$mount()
? ? ? ? ? ? ? ? //沒(méi)有掛載到任何文檔中,模板將被渲染為文檔之外的的元素,并且你必須使用原生DOM API把它插入文檔中。該方法返回實(shí)例自身。
? ? ? ? ? ? ? ? // console.log(instance.vm === instance) ?// 輸出為true
? ? ? ? ? ? ? ? document.body.appendChild(instance.vm.$el)//el對(duì)應(yīng)的就是組件的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中進(jìn)行全局組件的注冊(cè)

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

接下來(lái)在自己的組件中進(jìn)行引入

? ?this.$mmToast("此操作將永久刪除該文件, 是否繼續(xù)?")
? ? ? ? .then(() => {
? ? ? ? ? this.historyList = [];
? ? ? ? ? localStorage.setItem("placeHistory", null);
? ? ? ? ? console.log("刪除成功啦!");
? ? ? ? })
? ? ? ? .catch(() => {
? ? ? ? ? console.log("取消刪除啦");
? ? ? ? });

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用

    Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用

    這篇文章主要為大家介紹了Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 解決Vue控制臺(tái)報(bào)錯(cuò)Failed to mount component: template or render function not defined.

    解決Vue控制臺(tái)報(bào)錯(cuò)Failed to mount component: tem

    這篇文章主要介紹了解決Vue控制臺(tái)報(bào)錯(cuò)Failed to mount component: template or render function not defined.問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue-cli3 熱更新配置操作

    vue-cli3 熱更新配置操作

    這篇文章主要介紹了vue-cli3 熱更新配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定)

    vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定)

    本篇文章主要介紹了vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue中的路由導(dǎo)航守衛(wèi)導(dǎo)航解析流程

    Vue中的路由導(dǎo)航守衛(wèi)導(dǎo)航解析流程

    這篇文章主要介紹了Vue中的路由導(dǎo)航守衛(wèi)導(dǎo)航解析流程,正如其名,vue-router 提供的導(dǎo)航守衛(wèi)主要用來(lái)通過(guò)跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。這里有很多方式植入路由導(dǎo)航中:全局的,單個(gè)路由獨(dú)享的,或者組件級(jí)的
    2023-04-04
  • vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件

    vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件

    這篇文章主要給大家介紹了關(guān)于vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件的相關(guān)資料,用于預(yù)約上門服務(wù)時(shí)間 看到網(wǎng)上有很多亂七八糟的代碼,看著頭疼,于是自己寫了一個(gè)簡(jiǎn)單的,需要的朋友可以參考下
    2024-02-02
  • vue+openlayers繪制省市邊界線

    vue+openlayers繪制省市邊界線

    這篇文章主要為大家詳細(xì)介紹了vue+openlayers繪制省市邊界線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 解決vue多層彈框時(shí)存在遮擋問(wèn)題

    解決vue多層彈框時(shí)存在遮擋問(wèn)題

    本文給大家介紹vue多層彈框時(shí)存在遮擋問(wèn)題,解決思路首先想到的是找到對(duì)應(yīng)的遮擋層的css標(biāo)簽,然后修改z-index值,但是本思路只能解決首次問(wèn)題,再次打開(kāi)還會(huì)存在相同的問(wèn)題,故該思路錯(cuò)誤,下面給大家?guī)?lái)一種正確的思路,一起看看吧
    2022-03-03
  • Vue和原生JS中如何使用自定義字體

    Vue和原生JS中如何使用自定義字體

    這篇文章主要為大家詳細(xì)介紹了Vue和原生JS中如何使用自定義字體,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • vue搜索頁(yè)開(kāi)發(fā)實(shí)例代碼詳解(熱門搜索,歷史搜索,淘寶接口演示)

    vue搜索頁(yè)開(kāi)發(fā)實(shí)例代碼詳解(熱門搜索,歷史搜索,淘寶接口演示)

    這篇文章主要介紹了vue搜索頁(yè)開(kāi)發(fā)實(shí)例(熱門搜索,歷史搜索,淘寶接口演示),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

宝丰县| 马边| 澜沧| 瓮安县| 内丘县| 哈尔滨市| 惠州市| 汾西县| 肥西县| 南城县| 田林县| SHOW| 宣武区| 左云县| 晋州市| 巨鹿县| 永德县| 双桥区| 潍坊市| 本溪市| 吉木萨尔县| 宜宾市| 乐安县| 海淀区| 大埔县| 辉南县| 新和县| 太谷县| 沅江市| 临颍县| 克山县| 开江县| 盱眙县| 新宾| 且末县| 华安县| 个旧市| 孙吴县| 新兴县| 德兴市| 当雄县|