日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现

發布時間:2023/12/4 vue 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近在使用element-ui框架,用到了Dialog對話框組件,大致實現的效果,跟我之前自己在移動端項目里面弄的一個彈窗組件差不太多。然后就想著把這種彈窗組件的實現方式與大家分享一下,下面本文會帶著大家手摸手實現一個彈窗組件。

本文主要內容會涉及到彈窗遮罩的實現,slot插槽的使用方式,props、$emit傳參,具體組件代碼也傳上去了。如果喜歡的話可以點波贊/關注,支持一下,希望大家看完本文可以有所收獲。

組件最后實現的效果

實現步驟

先搭建組件的html和css樣式,遮罩層和內容層。

定制彈窗內容:彈窗組件通過slot插槽接受從父組件那里傳過來彈窗內容。

定制彈窗樣式:彈窗組件通過props接收從父組件傳過來的彈窗寬度,上下左右的位置。

組件開關:通過父組件傳進來的props控制組件的顯示與隱藏,子組件關閉時通過事件$emit觸發父組件改變值。

1.搭建組件的html和css樣式。

html結構:一層遮罩層,一層內容層,內容層里面又有一個頭部title和主體內容和一個關閉按鈕。

下面是組件中的html結構,里面有一些后面才要加進去的東西,如果看不懂的話可以先跳過,

提示信息

彈窗內容

下面是組件中的主要的css樣式,里面都做了充分的注釋,主要通過z-index和background達到遮罩的效果,具體內容的css可以根據自己的需求來設置。

// 最外層 設置position定位

.dialog {

position: relative;

color: #2e2c2d;

font-size: 16px;

}

// 遮罩 設置背景層,z-index值要足夠大確保能覆蓋,高度 寬度設置滿 做到全屏遮罩

.dialog-cover {

background: rgba(0,0,0, 0.8);

position: fixed;

z-index: 200;

top: 0;

left: 0;

width: 100%;

height: 100%;

}

// 內容層 z-index要比遮罩大,否則會被遮蓋,

.dialog-content{

position: fixed;

top: 35%;

// 移動端使用felx布局

display: flex;

flex-direction: column;

justify-content: center;

align-items: center;

z-index: 300;

}

---

2. 通過slot定制彈窗內容

這一步,只要理解了slot的作用以及用法,就沒有問題了。

單個插槽:

這是在沒有slot傳進來的時候,才顯示的彈窗內容

上面是單個插槽也叫默認插槽,在父組件中使用插槽的正確姿勢:

這是一些初始內容

這是更多的初始內容

ps:如果子組件里面包含slot插槽,那么上面的p標簽的內容將會被丟棄。

具名插槽:

所謂的具名插槽,即為slot標簽賦一個name屬性,具名插槽可以父組件中不同的內容片段放到子組件的不同地方,具名插槽還是可以擁有一個默認插槽。下面可以看一下彈窗組件插槽的使用方式:

提示信息

彈窗內容

在父組件中的使用方式:

將彈窗組件引入要使用的組件中,并通過components注冊成為組件。

父組件中彈窗組件插槽的使用方法如下。

插入到name為header的slot標簽里面

這里是內容插入到子組件的slot的name為main里面,可以在父組件中添加class定義樣式,事件類型等各種操作

關于組件中用到的插槽的介紹就到這里了,插槽在彈窗組件中的應用是一個典型的栗子,可以看到插槽作用相當強大,而插槽本身的使用并不難,同學們愛上插槽了沒有?

---

3.通過props控制彈窗顯隱&&定制彈窗style

psops是Vue中父組件向子組件傳遞數據的一種方式,不熟悉的小伙伴們可以看一下props文檔。

因為彈窗組件都是引到別的組件里面去用的,為了適合不同組件場景中的彈窗,所以彈窗組件必須具備一定的可定制性,否則這樣的組件將毫無意義,下面介紹一下props的使用方式,以彈窗組件為例:

首先需要在被傳入的組件中定義props的一些特性,驗證之類的。

然后在父組件中綁定props數據。

export default {

props: {

isShow: {

//彈窗組件是否顯示 默認不顯示

type: Boolean,

default: false,

required:true, //必須

},

//下面這些屬性會綁定到div上面 詳情參照上面的html結構

// 如: :style="{top:topDistance+'%',width:widNum+'%'}"

widNum:{

//內容寬度

type: Number,

default:86.5

},

leftSite:{

// 左定位

type: Number,

default:6.5

},

topDistance: {

//top上邊距

type: Number,

default:35

},

pdt:{

//上padding

type: Number,

default:22

},

pdb:{

//下padding

type: Number,

default:47

}

},

}

父組件中使用方式:

ps:props傳遞數據不是雙向綁定的,而是單向數據流,父組件的數據變化時,也會傳遞到子組件中,這就意外著我們不應該在子組件中修改props。所以我們在關閉彈窗的時候就需要通過$emit來修改父組件的數據,然后數據會自動傳到子組件中。

現在基本上彈窗組件都已實現的差不多了,還差一個彈窗的關閉事件,這里就涉及到子組件往父組件傳參了。

4.$emit觸發父組件事件修改數據,關閉彈窗

Vue中在子組件往父組件傳參,很多都是通過$emit來觸發父組件的事件來修改數據。

在子組件中,在點擊關閉,或者遮罩層的時候觸發下面這個方法:

methods: {

closeMyself() {

this.$emit("on-close");

//如果需要傳參的話,可以在"on-close"后面再加參數,然后在父組件的函數里接收就可以了。

}

}

父組件中的寫法:

//"on-close是監聽子組件的時間有沒有觸發,觸發的時候執行closeDialog函數

methods:{

closeDialog(){

// this.status.isShowPublish=false;

//把綁定的彈窗數組 設為false即可關閉彈窗

},

}

可以用彈窗組件實現下列這種信息展示,或者事件交互:

上面是把彈窗的每個步驟拆分開來,一步步解析的,每一步都說的比較清楚了,具體連起來的話,可以看看代碼,再結合文章就能理的很清楚了。

小結:

這個彈窗組件,實現起來一點都不難,我這里主要是提供了一個實現方式,當項目中有需要的話,大家也可以自己擼一個出來,以上就是本文的內容了,希望同學們看完能有所收獲。

希望看完的朋友可以點個喜歡,也可以關注一下我,您的支持是對我最大的鼓勵。

最后:如需轉載,請放上原文鏈接并署名。碼字不易,感謝支持!本人寫文章本著交流記錄的心態,寫的不好之處,不撕逼,但是歡迎指點。

以上2018.4.21

參考資料:

總結

以上是生活随笔為你收集整理的vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。