国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

vue彈窗插件實戰代碼

來源:懂視網 責編:小采 時間:2020-11-27 22:08:16
文檔

vue彈窗插件實戰代碼

vue彈窗插件實戰代碼:vue做移動端經常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗 popup.vue <template> <div class=popup-wrapper v-show=visible @click=hide> <div class=popup-text>{{text}}&
推薦度:
導讀vue彈窗插件實戰代碼:vue做移動端經常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗 popup.vue <template> <div class=popup-wrapper v-show=visible @click=hide> <div class=popup-text>{{text}}&

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

popup.vue

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

組件html結構, 外層divposition:fixed定位, 內層div顯示彈窗內容

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

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

測試一下

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

插件化

組件功能寫好了,但是這種調用方式顯得很累贅。舉個例子layer.js的調用就是layer.open(...)沒有import,沒有ref,當然要先全局引用layer。我們寫的彈窗能不能這么方便呢,為此需要把popup改寫成vue插件。
說是插件,但能配置屬性調用方法的還是組件本身,具體是實例化的組件,而且這個實例必須是全局單例,這樣不同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去控制,這里寫個方法讓屬性默認值繼續發揮作用

// 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)
 //監聽事件
 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內注冊插件

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

Vue.use(PopupPlugin)
在vue框架內調用就非常方便了

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

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue彈窗插件實戰代碼

vue彈窗插件實戰代碼:vue做移動端經常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗 popup.vue <template> <div class=popup-wrapper v-show=visible @click=hide> <div class=popup-text>{{text}}&
推薦度:
標簽: VUE 代碼 彈窗
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩亚洲欧洲在线com91tv | 亚洲欧洲高清有无 | 亚州一区二区 | 五月婷婷网站 | 免费网站看v片在线成人国产系列 | 香蕉午夜视频 | 成人精品一区二区www | 国产全部视频 | 国产1区2区 | 日韩欧美精品 | 日韩欧美 在线播放 | 在线欧美视频免费观看国产 | 欧美久久天天综合香蕉伊 | 亚洲 欧美 中文 日韩专区 | 亚洲最新在线观看 | 亚洲欧美中文日韩在线 | 亚洲精品国产精品乱码不97 | 国产 欧美 日韩 在线 | 中文字幕 在线观看 | 国产一区二区三区在线视频 | 日韩欧美国产精品第一页不卡 | 亚洲黄色一区二区 | 在线播放精品一区二区啪视频 | 国产在线观看精品一区二区三区91 | 精品国产免费观看一区高清 | a国产成人免费视频 | 国产欧美二区 | 国产欧美另类第一页 | 国产最新网站 | 欧美激情影音先锋 | 欧美 日韩 国产 成人 在线观看 | 日韩高清专区 | 在线视频一二三区2021不卡 | 精品日本一区二区三区在线观看 | 91原创国产 | 欧美a在线播放 | 国产a区| 美日韩三级 | 免费在线观看一区二区 | 国内精品伊人久久久影视 | 亚洲欧美另类视频 |