<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
<template> <el-dialog :title="title" :visible.sync="dialogVisible" :width="width" center> <slot name="content"></slot> </el-dialog> </template>
<script> export default { props: ["title", "width", "dialogVisible"], data() { return {}; } }; </script>
<style lang="less"> .el-dialog__header { padding: 20px 20px 10px; display: none; } .el-dialog__body { padding: 0px !important; } </style>
<!-- 彈窗 --> <DialogModal :width="'552px'" :title="'加入黑名單'" :dialogVisible="centerDialogVisible"> <div slot="content" class="popup"> <div class="head"> 加入黑名單 <i class="el-icon-close" @click="handelCloseModal()"></i> </div> <p class="isAdd">確定要講客戶王佳琛加入甄別黑名單?</p> <div class="confirm"> <el-button type="primary">確定</el-button> <el-button plain>取消</el-button> </div> </div> </DialogModal> <!-- 彈窗 -->
slot 即插槽,相當於在子元件的 DOM 中留一個位置,父元件如果有需要,就可以在插槽裡新增內容。
這裡是一個插槽的簡單用法。
1.在子元件 Modal.vue 中用 slot 標籤預留一個位置,slot 標籤中的內容是後備內容,也可以為空:
<div class="modal-content"> <slot>這是個彈框</slot> <div class="footer"> <button @click="close">close</button> <button @click="confirm">confirm</button> </div> </div>
後備內容:當父元件不在插槽裡新增內容時,插槽顯示的內容。
2.在父元件中使用子元件
在父元件中使用子元件,但不向自定義元件的插槽 slot 中新增內容:
<Modal :visible.sync="visible"></Modal>
此時如果開啟彈框,彈框中顯示的是後備內容“這是個彈框”:
在父元件中使用子元件,並給插槽加入個性化內容:
<Modal :visible.sync="visible">個性化內容</Modal>
此時如果開啟彈框,彈框中顯示的是“個性化內容”:
父App.vue
<template> <div id="app"> <button @click="visible = true" class="btn">開啟「留言」彈框</button> <button @click="visibleApply = true" class="btn">開啟「成為大牛」彈框</button> <!-- 「留言」彈框 --> <Modal customClassName="textarea-modal" title="留言" :visible.sync="visible" @confirm="confirm" > <template> <div class="txt">留下你想告訴我們的話...</div> <textarea name="" id="" cols="30" rows="10" placeholder="請寫下您的寶貴意見" ></textarea> </template> </Modal> <!-- 「成為大牛」彈框 --> <Modal customClassName="apply-modal" title="成為大牛" :visible.sync="visibleApply" @confirm="confirm" > <template> <div class="txt">留下聯絡方式,立即成為大牛</div> <div class="mobile"> <input type="text" placeholder="請輸入您的手機號碼" /> </div> <div class="code"> <input type="text" placeholder="請輸入驗證碼" /> <button class="btn-code">獲取驗證碼</button> </div> </template> </Modal> </div> </template>
<script> // 引入元件 import Modal from './components/Modal.vue'; export default { name: 'app', // 註冊元件 components: { Modal }, data: function() { return { // 控制「留言」彈框 visible: false, // 控制「成為大牛」彈框 visibleApply: false }; }, methods: { // 自定義函數 confirm confirm() { // todo } } }; </script>
<style lang="scss"> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } .btn { width: fit-content; height: 40px; font-size: 15px; line-height: 40px; box-sizing: border-box; cursor: pointer; border: none; background: #ffffff; border: 1px solid #ebebeb; color: #1b1b1b; padding: 0 20px; margin-right: 20px; &:focus { outline: none; } } .textarea-modal { .txt { text-align: left; padding-top: 20px; font-size: 16px; line-height: 22px; color: #000000; } textarea { width: 355px; height: 110px; border: 1px solid #e6e6e6; font-size: 16px; line-height: 22px; color: #000000; padding: 14px 20px; box-sizing: border-box; margin-top: 18px; &::placeholder { color: rgba(0, 0, 0, 0.2); } &:focus { outline: none; } } } .apply-modal { .txt { text-align: left; padding-top: 20px; font-size: 16px; line-height: 22px; color: #000000; margin-bottom: 18px; } .mobile input, .code input { width: 355px; height: 50px; background: #ffffff; border: 1px solid #eeeeee; font-size: 16px; color: #000000; padding: 14px 20px; box-sizing: border-box; &::placeholder { color: rgba(0, 0, 0, 0.2); } &:focus { outline: none; } } .code { margin-top: 20px; position: relative; input { padding-right: 120px; } .btn-code { height: 50px; padding: 0 20px; font-size: 14px; line-height: 50px; color: #2c3744; background: none; border: none; position: absolute; top: 0; right: 0; &:focus { outline: none; } &::before { content: ''; display: block; width: 1px; height: 20px; background: #e5e5e5; position: absolute; left: 0; top: 15px; } } } } </style>
子Modal.vue
<template> <div :class="['modal', customClassName]" v-if="visible"> <div class="modal-content"> <div class="modal-header"> <div class="title">{{title}}</div> <button class="btn-close" @click="close"></button> </div> <div class="modal-body"> <slot></slot> </div> <div class="modal-footer"> <button class="btn-close" @click="close">取消</button> <button class="btn-confirm" @click="confirm">提交</button> </div> </div> </div> </template>
<script> export default { name: 'Modal', // customClassName 為自定義類名 // title 為彈框標題 props: ['visible', 'title', 'customClassName'], methods: { close() { this.$emit('update:visible', false); }, confirm() { console.log('confirm'); this.close(); } } }; </script>
<style lang="scss" scoped> .modal { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: rgba(#000, 0.5); display: flex; align-items: center; justify-content: center; .modal-content { width: 415px; background: #fff; border-radius: 12px; text-align: center; .modal-header { height: 65px; position: relative; font-weight: 500; font-size: 18px; line-height: 65px; color: #000000; border-bottom: 1px solid #f2f2f2; .btn-close { width: 16px; height: 16px; background: url(https://qgt-document.oss-cn-beijing.aliyuncs.com/P3-5-Vue/5/5-1-1.png) no-repeat center / contain; position: absolute; top: 23px; right: 30px; border: none; cursor: pointer; &:focus { outline: none; } } } .modal-body { padding: 0 30px; font-size: 0; } .modal-footer { padding: 30px; display: flex; justify-content: space-between; .btn-close, .btn-confirm { width: 125px; height: 40px; font-size: 15px; line-height: 40px; box-sizing: border-box; cursor: pointer; border: none; &:focus { outline: none; } } .btn-close { background: #ffffff; border: 1px solid #ebebeb; color: #1b1b1b; } .btn-confirm { background: #3ab599; color: #fff; } } } } </style>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45