最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

写一个Vue Popup组件

来源:动视网 责编:小采 时间:2020-11-27 22:00:36
文档

写一个Vue Popup组件

写一个Vue Popup组件:组件长这样 主要有标题、内容、按钮个数、按钮颜色、按钮文案这些可配置项 期望的调用方式一 不需要等待用户二次确认 import Modal from 'common/components/modal' handleModal() { Modal({ title: '赚取收益?', content:
推荐度:
导读写一个Vue Popup组件:组件长这样 主要有标题、内容、按钮个数、按钮颜色、按钮文案这些可配置项 期望的调用方式一 不需要等待用户二次确认 import Modal from 'common/components/modal' handleModal() { Modal({ title: '赚取收益?', content:


<template>
 <transition name="modal-pop">

 <div class="wrap"
 v-show="visible">

 <div class="modal">

 <h3>{{ title }}</h3>

 <p>{{ content }}</p>

 <div class="btns">
 <span v-if="showCancel"
 @click="visible = false"
 :style="`color: ${cancelColor}`">{{ cancelText }}</span>
 <span @click="handleConfirm()"
 :style="`color: ${confirmColor}`">{{ confirmText }}</span>
 </div>

 </div>

 </div>

 </transition>
</template>

<style lang="less">
@import './modal.less';
</style>

定义好 props 参数列表,visible 作为组件内部状态控制弹框打开关闭

export default {
 props: [
 'title',
 'content',
 'showCancel',
 'cancelColor',
 'cancelText',
 'confirmText',
 'confirmColor'
 ],

 data() {
 return {
 visible: false
 }
 }
}

组件包装

common/components/modal/index.js

先利用 vue 的 extend 拿到刚编写的模板

import Vue from 'vue'

const ModalConstructor = Vue.extend(require('./modal.vue'))

const Modal = (opts = {}) => {
 let _m = new ModalConstructor({ el: document.createElement('div') })
}

export default Modal

配置好默认参数,并将 visible 状态打开以显示弹框,最终插入页面

import Vue from 'vue'

const ModalConstructor = Vue.extend(require('./modal.vue'))

const Modal = (opts = {}) => {
 let _m = new ModalConstructor({ el: document.createElement('div') })

 _m.title = opts.title || '提示'
 _m.content = opts.content || ''
 _m.showCancel = opts.showCancel || false
 _m.cancelText = opts.cancelText || '取消'
 _m.cancelColor = opts.cancelColor || '#000'
 _m.confirmText = opts.confirmText || '确定'
 _m.confirmColor = opts.confirmColor || '#ff7400'
 _m.visible = true

 document.body.appendChild(_m.$el)
}

export default Modal

用户点击二次确认事件后,为了方便组件外部捕捉,这里使用 Promise 包装回调事件

这样 handleConfirm() 放在这里实现是不是就方便很多了
import Vue from 'vue'

const ModalConstructor = Vue.extend(require('./modal.vue'))

const Modal = (opts = {}) => {
 let _m = new ModalConstructor({ el: document.createElement('div') })

 _m.title = opts.title || '提示'
 _m.content = opts.content || ''
 _m.showCancel = opts.showCancel || false
 _m.cancelText = opts.cancelText || '取消'
 _m.cancelColor = opts.cancelColor || '#000'
 _m.confirmText = opts.confirmText || '确定'
 _m.confirmColor = opts.confirmColor || '#ff7400'
 _m.visible = true

 document.body.appendChild(_m.$el)

 return new Promise(resolve => {
 return (_m.handleConfirm = () => {
 _m.visible = false
 resolve()
 })
 })
}

export default Modal

最终长这样

import Modal from 'common/components/modal'

async handleModal() {
 await Modal({
 title: '确定现在申请结束吗?',
 content: '申请后预计1-5个工作日可退出',
 cancelColor: '#ff7400',
 confirmColor: '#000',
 showCancel: true
 })

 console.log('用户确认了!')
}

文档

写一个Vue Popup组件

写一个Vue Popup组件:组件长这样 主要有标题、内容、按钮个数、按钮颜色、按钮文案这些可配置项 期望的调用方式一 不需要等待用户二次确认 import Modal from 'common/components/modal' handleModal() { Modal({ title: '赚取收益?', content:
推荐度:
标签: VUE 编写 组件
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top