欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Vue組件實(shí)現(xiàn)一個(gè)簡(jiǎn)單彈窗效果

 更新時(shí)間:2018年04月23日 08:25:25   作者:OBKoro1  
這篇文章主要介紹了使用Vue組件實(shí)現(xiàn)一個(gè)簡(jiǎn)單彈窗效果,本文主要內(nèi)容會(huì)涉及到彈窗遮罩的實(shí)現(xiàn), slot 插槽的使用方式,props 、 $emit 傳參,具體組件代碼也傳上去了。需要的朋友可以參考下

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

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

組件最后實(shí)現(xiàn)的效果

 

實(shí)現(xiàn)步驟

  1. 先搭建組件的html和css樣式,遮罩層和內(nèi)容層。
  2. 定制彈窗內(nèi)容:彈窗組件通過(guò) slot 插槽接受從父組件那里傳過(guò)來(lái)彈窗內(nèi)容。
  3. 定制彈窗樣式:彈窗組件通過(guò) props 接收從父組件傳過(guò)來(lái)的彈窗寬度,上下左右的位置。
  4. 組件開(kāi)關(guān):通過(guò)父組件傳進(jìn)來(lái)的 props 控制組件的顯示與隱藏,子組件關(guān)閉時(shí)通過(guò)事件 $emit 觸發(fā)父組件改變值。

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

html結(jié)構(gòu):一層遮罩層,一層內(nèi)容層,內(nèi)容層里面又有一個(gè)頭部title和主體內(nèi)容和一個(gè)關(guān)閉按鈕。

下面是組件中的html結(jié)構(gòu),里面有一些后面才要加進(jìn)去的東西,如果看不懂的話可以先跳過(guò),

<template>
 <div class="dialog">
  <!--外層的遮罩 點(diǎn)擊事件用來(lái)關(guān)閉彈窗,isShow控制彈窗顯示 隱藏的props-->
  <div class="dialog-cover back" v-if="isShow" @click="closeMyself"></div>
  <!-- transition 這里可以加一些簡(jiǎn)單的動(dòng)畫(huà)效果 -->
  <transition name="drop">
   <!--style 通過(guò)props 控制內(nèi)容的樣式 -->
  <div class="dialog-content" :style="{top:topDistance+'%',width:widNum+'%',left:leftSite+'%'}" v-if="isShow">
   <div class="dialog_head back">
    <!--彈窗頭部 title-->
    <slot name="header">提示信息</slot>
   </div>
   <div class="dialog_main" :style="{paddingTop:pdt+'px',paddingBottom:pdb+'px'}">
   <!--彈窗的內(nèi)容-->
   <slot name="main">彈窗內(nèi)容</slot>
   </div>
   <!--彈窗關(guān)閉按鈕-->
   <div class="foot_close" @click="closeMyself">
    <div class="close_img back"></div>
   </div>
  </div>
 </transition>
 </div>
</template>

下面是組件中的主要的css樣式,里面都做了充分的注釋,主要通過(guò) z-index 和 background 達(dá)到遮罩的效果,具體內(nèi)容的css可以根據(jù)自己的需求來(lái)設(shè)置。

<style lang="scss" scoped>
 // 最外層 設(shè)置position定位 
 .dialog {
 position: relative;
 color: #2e2c2d;
 font-size: 16px;
 }
 // 遮罩 設(shè)置背景層,z-index值要足夠大確保能覆蓋,高度 寬度設(shè)置滿 做到全屏遮罩
 .dialog-cover {
 background: rgba(0,0,0, 0.8);
 position: fixed;
 z-index: 200;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 }
 // 內(nèi)容層 z-index要比遮罩大,否則會(huì)被遮蓋,
 .dialog-content{
 position: fixed;
 top: 35%;
 // 移動(dòng)端使用felx布局 
 display: flex;
 flex-direction: column;
 justify-content: center;
 align-items: center;
 z-index: 300;
 }
</style>

2. 通過(guò) slot 定制彈窗內(nèi)容

這一步,只要理解了 slot 的作用以及用法,就沒(méi)有問(wèn)題了。

單個(gè)插槽:

<slot>這是在沒(méi)有slot傳進(jìn)來(lái)的時(shí)候,才顯示的彈窗內(nèi)容</slot>
上面是單個(gè)插槽也叫默認(rèn)插槽,在父組件中使用插槽的正確姿勢(shì):

<my-component>
 <!--在my-component里面的所有內(nèi)容片段都將插入到slot所在的DOM位置,并且會(huì)替換掉slot標(biāo)簽-->
 <!--這兩個(gè)p標(biāo)簽,將替換整個(gè)slot標(biāo)簽里面的內(nèi)容-->
 <p>這是一些初始內(nèi)容</p>
 <p>這是更多的初始內(nèi)容</p>
</my-component>

ps:如果子組件里面包含 slot 插槽,那么上面的p標(biāo)簽的內(nèi)容將會(huì)被丟棄。

具名插槽:

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

<div class="dialog_head back ">
 <!--彈窗頭部 title-->
 <slot name="header">提示信息</slot>
 </div>
 <div class="dialog_main " :style="{paddingTop:pdt+'px',paddingBottom:pdb+'px'}">
 <!--彈窗的內(nèi)容-->
 <slot name="main">彈窗內(nèi)容</slot>
 </div>

在父組件中的使用方式:

將彈窗組件引入要使用的組件中,并通過(guò) components 注冊(cè)成為組件。
父組件中彈窗組件插槽的使用方法如下。

<dialogComponent>

 <div slot="header">插入到name為header的slot標(biāo)簽里面</div>
  <div class="dialog_publish_main" slot="main">
  這里是內(nèi)容插入到子組件的slot的name為main里面,可以在父組件中添加class定義樣式,事件類型等各種操作
  </div>
</dialogComponent>

關(guān)于組件中用到的插槽的介紹就到這里了,插槽在彈窗組件中的應(yīng)用是一個(gè)典型的栗子,可以看到插槽作用相當(dāng)強(qiáng)大,而插槽本身的使用并不難,同學(xué)們愛(ài)上插槽了沒(méi)有?

3.通過(guò) props 控制彈窗顯隱&&定制彈窗style

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

因?yàn)閺棿敖M件都是引到別的組件里面去用的,為了適合不同組件場(chǎng)景中的彈窗,所以彈窗組件必須具備一定的可定制性,否則這樣的組件將毫無(wú)意義,下面介紹一下props的使用方式,以彈窗組件為例:

首先需要在被傳入的組件中定義props的一些特性,驗(yàn)證之類的。
然后在父組件中綁定props數(shù)據(jù)。

<script>
export default {
 props: {
 isShow: { 
 //彈窗組件是否顯示 默認(rèn)不顯示
  type: Boolean,
  default: false,
  required:true, //必須
 },
 //下面這些屬性會(huì)綁定到div上面 詳情參照上面的html結(jié)構(gòu)
 // 如: :style="{top:topDistance+'%',width:widNum+'%'}"
 widNum:{ 
 //內(nèi)容寬度
  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
 }
 },
}
</script>

父組件中使用方式:

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum">
</dialogComponent>

ps:props傳遞數(shù)據(jù)不是雙向綁定的,而是 單向數(shù)據(jù)流 ,父組件的數(shù)據(jù)變化時(shí),也會(huì)傳遞到子組件中,這就意外著我們不應(yīng)該在子組件中修改props。所以我們?cè)陉P(guān)閉彈窗的時(shí)候就 需要通過(guò) $emit 來(lái)修改父組件的數(shù)據(jù) ,然后數(shù)據(jù)會(huì)自動(dòng)傳到子組件中。

現(xiàn)在基本上彈窗組件都已實(shí)現(xiàn)的差不多了,還差一個(gè)彈窗的關(guān)閉事件,這里就涉及到子組件往父組件傳參了。

4. $emit 觸發(fā)父組件事件修改數(shù)據(jù),關(guān)閉彈窗

Vue中在子組件往父組件傳參,很多都是通過(guò) $emit 來(lái)觸發(fā)父組件的事件來(lái)修改數(shù)據(jù)。

在子組件中,在點(diǎn)擊關(guān)閉,或者遮罩層的時(shí)候觸發(fā)下面這個(gè)方法:

methods: {
 closeMyself() {
  this.$emit("on-close"); 
  //如果需要傳參的話,可以在"on-close"后面再加參數(shù),然后在父組件的函數(shù)里接收就可以了。
 }
 }

父組件中的寫(xiě)法:

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum" @on-close="closeDialog"> 
 </dialogComponent>
 //"on-close是監(jiān)聽(tīng)子組件的時(shí)間有沒(méi)有觸發(fā),觸發(fā)的時(shí)候執(zhí)行closeDialog函數(shù)
methods:{
 closeDialog(){
 // this.status.isShowPublish=false;
 //把綁定的彈窗數(shù)組 設(shè)為false即可關(guān)閉彈窗
 },
}

可以用彈窗組件實(shí)現(xiàn)下列這種信息展示,或者事件交互:

 

彈窗組件代碼

上面是把彈窗的每個(gè)步驟拆分開(kāi)來(lái),一步步解析的,每一步都說(shuō)的比較清楚了,具體連起來(lái)的話,可以看看 代碼 ,再結(jié)合文章就能理的很清楚了。

總結(jié)

以上所述是小編給大家介紹的使用Vue組件實(shí)現(xiàn)一個(gè)簡(jiǎn)單彈窗效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue中 process.env與process.VUE_CLI_SERVICE詳解

    vue中 process.env與process.VUE_CLI_SERVICE詳解

    這篇文章主要介紹了vue中process.env與process.VUE_CLI_SERVICE的相關(guān)資料,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • vue同步父子組件和異步父子組件的生命周期順序問(wèn)題

    vue同步父子組件和異步父子組件的生命周期順序問(wèn)題

    這篇文章主要介紹了vue同步父子組件和異步父子組件的生命周期順序問(wèn)題,需要的朋友可以參考下
    2018-10-10
  • jeecgboot-vue3查詢區(qū)label文字居左實(shí)現(xiàn)過(guò)程解析

    jeecgboot-vue3查詢區(qū)label文字居左實(shí)現(xiàn)過(guò)程解析

    這篇文章主要為大家介紹了jeecgboot-vue3查詢區(qū)label文字居左實(shí)現(xiàn)過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-08-08
  • vue權(quán)限問(wèn)題的完美解決方案

    vue權(quán)限問(wèn)題的完美解決方案

    今天來(lái)說(shuō)說(shuō)權(quán)限管理,因?yàn)榫W(wǎng)上已經(jīng)有很多關(guān)于這方面的很多內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于vue權(quán)限問(wèn)題的完美解決方案,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 關(guān)于Vue.js一些問(wèn)題和思考學(xué)習(xí)筆記(2)

    關(guān)于Vue.js一些問(wèn)題和思考學(xué)習(xí)筆記(2)

    這篇文章主要為大家分享了關(guān)于Vue.js一些問(wèn)題和思考的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue中使用postcss-px2rem的兩種方法

    vue中使用postcss-px2rem的兩種方法

    這篇文章主要介紹了vue項(xiàng)目中使用postcss-px2rem的方法總結(jié),在項(xiàng)目中為了屏幕適配,經(jīng)常會(huì)用到rem,postcss-px2rem就是為了讓我們直接在將代碼中px自動(dòng)轉(zhuǎn)化成對(duì)應(yīng)的rem的一個(gè)插件,需要的朋友可以參考下
    2022-05-05
  • el-upload大文件切片上傳實(shí)現(xiàn)示例詳解

    el-upload大文件切片上傳實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了el-upload大文件切片上傳實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Vue獲取DOM元素并修改屬性的方法

    Vue獲取DOM元素并修改屬性的方法

    這篇文章主要介紹了Vue獲取DOM元素并修改屬性或者樣式,文中通過(guò)兩種方法給大家介紹了vue 如何獲取并操作DOM元素,需要的朋友可以參考下
    2022-10-10
  • vue-cli3 取消eslint校驗(yàn)代碼的解決辦法

    vue-cli3 取消eslint校驗(yàn)代碼的解決辦法

    這篇文章主要介紹了vue-cli3 取消eslint校驗(yàn)代碼的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • vue項(xiàng)目中定時(shí)器無(wú)法清除的原因解決

    vue項(xiàng)目中定時(shí)器無(wú)法清除的原因解決

    頁(yè)面有定時(shí)器,并且定時(shí)器在離開(kāi)頁(yè)面時(shí),有清除,本文主要介紹了vue項(xiàng)目中定時(shí)器無(wú)法清除的原因解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02

最新評(píng)論