vue封裝彈框
vue彈出框的封裝和點選彈出框外部的事件觸發
封裝主要利用vue之間的元件通訊
Home.vue 父元件
<template>
<div>
<div class="box_popup">
<div class="popup_title">彈出框</div>
<button @click="tan">點選彈出彈出層</button>
<!--
title:標題內容 預設值:預設標題
content_text:自定義文字內容 預設值:預設內容
template:插槽內容,可插入文字框,HTML,圖片...
hidden:判斷彈出層顯示隱藏
popup_sub:子元件確定事件
popup_clo:子元件的取消事件
clo_box:點選了彈出框外部內容
-->
<Popup
title="父元件標題"
:hidden="this.ishidden"
@popup_sub="popup_submit"
@popup_clo="popup_close"
@clo_box="close_box"
>
</Popup>
</div>
</div>
</template>
<script>
import Popup from "../components/Popup";
export default {
components: {
Popup,
},
data() {
return {
ishidden: false,
};
},
methods: {
//點選彈出彈出層
tan() {
this.ishidden = true;
},
//子元件的確定事件
popup_submit() {
this.ishidden = false;
console.log("點選了確定按鈕");
},
//子元件的取消事件
popup_close() {
this.ishidden = false;
console.log("點選了取消事件");
},
//點選彈出框以外觸發
close_box() {
this.ishidden = false;
console.log("點選了彈出框外部");
},
},
};
</script>
<style scoped>
.box_popup {
border: 1px solid red;
}
.popup_title {
text-align: center;
font-size: 30px;
}
</style>
Popup.vue 子元件
<template>
<div class="box" v-show="this.hidden" @click.stop="clo_box">
<div class="popup_content">
<div class="popup_title">{{ this.title }}</div>
<div class="popup_center">
<div v-if="this.content_text">{{ this.content_text }}</div>
<slot></slot>
</div>
<div class="popup_bottom">
<button @click="popup_sub">確定</button>
<button @click="popup_clo">取消</button>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "預設標題",
},
content_text: {
type: String,
default: "",
},
hidden: {
type: Boolean,
default: false,
},
},
methods: {
//點選確定事件
popup_sub() {
this.$emit("popup_sub");
},
//點選了取消事件
popup_clo() {
this.$emit("popup_clo");
},
//點選了彈出框以外區域
clo_box(e) {
if (e.target._prevClass == "box") {
this.$emit("clo_box")
}
},
},
};
</script>
<style scoped>
.box {
background-color: rgba(128, 128, 128, 0.507);
width: 100%;
height: 100%;
position: absolute;
top: 0px;
}
.popup_content {
background-color: white;
padding: 1%;
border-radius: 20px;
width: 40%;
margin: 10% auto;
}
.popup_title {
text-align: center;
font-weight: 600;
font-size: 30px;
}
.popup_center {
padding: 10%;
font-size: 20px;
}
.popup_bottom {
display: flex;
justify-content: space-around;
}
button {
width: 25%;
height: 20%;
padding: 2%;
border: 1px solid gray;
border-radius: 10px;
}
button:nth-child(1) {
background-color: orangered;
color: white;
font-size: 20px;
}
button:nth-child(2) {
background-color: gray;
color: black;
font-size: 20px;
}
</style>
相關文章
- 封裝一個的toast彈出框(vue專案)封裝ASTVue
- 封裝Vue Element的dialog彈窗元件封裝Vue元件
- 基於vue和elementUI封裝框選表格元件VueUI封裝元件
- react封裝一個可自定義內容的modal彈框元件React封裝元件
- 【vue系列】封裝公共彈窗元件的正確方式Vue封裝元件
- 基於Vue.js PC桌面端彈出框元件|vue自定義彈層元件|vue模態框Vue.js元件
- vue3系列:vue3.0自定義彈框元件V3Popup|vue3.x手機端彈框元件Vue元件
- 彈框
- vue 封裝按鈕Vue封裝
- vue元件封裝指南Vue元件封裝
- Ladda的vue封裝Vue封裝
- Vue 封裝動態元件Vue封裝元件
- vue專案封裝iconVue封裝
- Vue Axios 的封裝使用VueiOS封裝
- 封裝Vue 的 SVG 元件封裝VueSVG元件
- Vue 封裝 loading 外掛Vue封裝
- 封裝React AntD的dialog彈窗元件封裝React元件
- 【小小前端】瞎搞事——對elementUI中MessageBox 彈框的二次封裝引發的討論前端UI封裝
- vue3.x自定義彈框元件|vue3.0移動端彈窗|vue3全域性元件Vue元件
- Vue3——axios 安裝和封裝VueiOS封裝
- vue3 echart元件封裝Vue元件封裝
- vue中使用axios的封裝VueiOS封裝
- 彈框 在Avalonia中,使用系統預設的彈框
- 小程式自定義modal彈窗封裝實現封裝
- 仿IOS底部彈框iOS
- 頁面table彈框
- Selenium彈框處理
- vue中axios請求的封裝VueiOS封裝
- vue中axios的使用與封裝VueiOS封裝
- VUE封裝的元件庫上傳Vue封裝元件
- Vue — v-load封裝 loading效果Vue封裝
- vue-cli 3.0 + 對 axios 封裝VueiOS封裝
- 封裝Vue Element的table表格元件封裝Vue元件
- vue - axios網路封裝模組VueiOS封裝
- 如何優雅的封裝vue元件封裝Vue元件
- vue中對axios進行封裝VueiOS封裝
- Vue Hook 封裝通用型表格VueHook封裝
- 公司需求系列:js封裝一個移動端modal框JS封裝