日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue弹窗插件实战

發(fā)布時間:2023/12/19 vue 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue弹窗插件实战 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

vue做移動端經(jīng)常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗

popup.vue

<template><div class="popup-wrapper" v-show="visible" @click="hide"><div class="popup-text">{{text}}</div></div> </template>

組件html結(jié)構(gòu), 外層divposition:fixed定位, 內(nèi)層div顯示彈窗內(nèi)容

export default {name: 'popup',props: {text: { //文字內(nèi)容type: String,default: ''},time: { //顯示的時長type: Number,default: 3e3},},data(){return {visible: false}},methods: {open() {this.visible = trueclearTimeout(this.timeout);this.$emit('show')if(this.time > 0){this.timeout = setTimeout(() => {this.hide()}, this.time)}},hide() {this.visible = falsethis.$emit('hide')clearTimeout(this.timeout);}} }

popup.vue只有2個屬性: 文本和顯示時間。組件顯示隱藏由內(nèi)部屬性visible控制,只暴露給外界open和hide2個方法,2個方法觸發(fā)對應(yīng)的事件

測試一下

<template><popup ref="popup" text="彈窗內(nèi)容" :time="1e3"></popup> </template> <script> import Popup from '@/components/popup'...this.$refs.popup.open()... </script>

插件化

組件功能寫好了,但是這種調(diào)用方式顯得很累贅。舉個例子layer.js的調(diào)用就是layer.open(...)沒有import,沒有ref,當(dāng)然要先全局引用layer。我們寫的彈窗能不能這么方便呢,為此需要把popup改寫成vue插件。
說是插件,但能配置屬性調(diào)用方法的還是組件本身,具體是實例化的組件,而且這個實例必須是全局單例,這樣不同vue文件喚起popup的時候才不會打架

生成單例

// plugins/popupVm.js import Popup from '@/components/popup' let $vm export const factory = (Vue)=> {if (!$vm) {let Popup = Vue.extend(PopupComponent)$vm = new Popup({el: document.createElement('div')})document.body.appendChild($vm.$el)}return $vm }

組件實例化后是添加在body上的,props不能寫在html里需要js去控制,這里寫個方法讓屬性默認(rèn)值繼續(xù)發(fā)揮作用

// plugins/util.js export const setProps = ($vm, options) => {const defaults = {}Object.keys($vm.$options.props).forEach(k => {defaults[k] = $vm.$options.props[k].default})const _options = _.assign({}, defaults, options)for (let i in _options) {$vm.$props[i] = _options[i]} } // plugins/popupPlugin.js import { factory } from './popupVm' import { setProps } from './util'export default {install(Vue) {let $vm = factory(Vue);const popup = {open(options) {setProps($vm, options)//監(jiān)聽事件typeof options.onShow === 'function' && $vm.$once('show', options.onShow);typeof options.onHide === 'function' && $vm.$once('hide', options.onHide);$vm.open();},hide() {$vm.hide()},//只配置文字text(text) {this.open({ text })}}Vue.prototype.$popup = popup} }

在main.js內(nèi)注冊插件

//main.js import Vue from 'vue' import PopupPlugin from '@/plugins/popupPlugin'Vue.use(PopupPlugin)

在vue框架內(nèi)調(diào)用就非常方便了

<script>...this.$popup.text('彈窗消息')... </script>

總結(jié)

以上是生活随笔為你收集整理的vue弹窗插件实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。