国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

寫一個(gè)Vue Popup組件

2019-11-19 12:04:32
字體:
供稿:網(wǎng)友

組件長這樣

主要有標(biāo)題、內(nèi)容、按鈕個(gè)數(shù)、按鈕顏色、按鈕文案這些可配置項(xiàng)

期望的調(diào)用方式一

不需要等待用戶二次確認(rèn)

import Modal from 'common/components/modal'handleModal() { Modal({  title: '賺取收益?',  content: '根據(jù)您的授權(quán)金額和計(jì)息天數(shù)計(jì)算得出(還未到賬)。實(shí)際以到賬金額為準(zhǔn)。',  confirmText: '我知道了' })}

期望的調(diào)用方式二

需要等待用戶二次確認(rèn)

import Modal from 'common/components/modal'async handleModal() { await Modal({  title: '確定現(xiàn)在申請(qǐng)結(jié)束嗎?',  content: '申請(qǐng)后預(yù)計(jì)1-5個(gè)工作日可退出',  cancelColor: '#ff7400',  confirmColor: '#000',  showCancel: true })}

模板長這樣

common/components/modal/modal.vue

這里用 transition 來包裹動(dòng)畫,填好配置參數(shù)就行了

handleConfirm() 二次確認(rèn)事件我們不放這里實(shí)現(xiàn),具體原因后面會(huì)講
<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 參數(shù)列表,visible 作為組件內(nèi)部狀態(tài)控制彈框打開關(guān)閉

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

配置好默認(rèn)參數(shù),并將 visible 狀態(tài)打開以顯示彈框,最終插入頁面

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

用戶點(diǎn)擊二次確認(rèn)事件后,為了方便組件外部捕捉,這里使用 Promise 包裝回調(diào)事件

這樣 handleConfirm() 放在這里實(shí)現(xiàn)是不是就方便很多了
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: '確定現(xiàn)在申請(qǐng)結(jié)束嗎?',  content: '申請(qǐng)后預(yù)計(jì)1-5個(gè)工作日可退出',  cancelColor: '#ff7400',  confirmColor: '#000',  showCancel: true }) console.log('用戶確認(rèn)了!')}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仙游县| 基隆市| 慈利县| 达日县| 河西区| 额济纳旗| 望谟县| 金塔县| 壤塘县| 鸡东县| 筠连县| 灌阳县| 和林格尔县| 武宁县| 宁化县| 博野县| 南宫市| 桃源县| 茶陵县| 泰和县| 宣武区| 平塘县| 延庆县| 泌阳县| 晋中市| 宁远县| 桐城市| 邵武市| 富民县| 玉田县| 庆云县| 黑水县| 安阳县| 海宁市| 崇州市| 曲麻莱县| 三明市| 彭州市| 隆子县| 运城市| 临沂市|