欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue彈窗插件實戰(zhàn)代碼

 更新時間:2018年09月08日 10:40:28   作者:riuzhou  
這篇文章主要介紹了vue彈窗插件實戰(zhàn)代碼,小編覺得挺不錯的,現(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 = 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個屬性: 文本和顯示時間。組件顯示隱藏由內(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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3前端生成隨機id(生成?UUID)實際運用

    Vue3前端生成隨機id(生成?UUID)實際運用

    前端在做增刪改查時通常會使??個唯?數(shù)值做為數(shù)據(jù)的key值,下面這篇文章主要給大家介紹了關(guān)于Vue3前端生成隨機id(生成?UUID)的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-04-04
  • Vue導(dǎo)出el-table表格為Excel文件的兩種方式

    Vue導(dǎo)出el-table表格為Excel文件的兩種方式

    在開發(fā)過程中,我們經(jīng)常需要將表格數(shù)據(jù)導(dǎo)出為 Excel 文件,大多數(shù)情況下,由后端處理即可,但是當(dāng)數(shù)據(jù)量不大、需要快速響應(yīng)用戶操作、或者數(shù)據(jù)已經(jīng)在前端進(jìn)行處理和展示時,前端該如何實現(xiàn)呢,本文將介紹兩種方法,需要的朋友可以參考下
    2024-09-09
  • vue-cli 如何打包上線的方法示例

    vue-cli 如何打包上線的方法示例

    這篇文章主要介紹了vue-cli 如何打包上線的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 解決vue父組件調(diào)用子組件只執(zhí)行一次問題

    解決vue父組件調(diào)用子組件只執(zhí)行一次問題

    開發(fā)中,需求是將內(nèi)容展示作為一個組件,輸入為contentId,請求在組件中,只需根據(jù)父組件傳過來的contentId去請求內(nèi)容的詳情即可,但是過程中卻發(fā)現(xiàn)一個問題,父組件調(diào)用子組件只執(zhí)行一次,所以本文就給大家介紹解決vue父組件調(diào)用子組件只執(zhí)行一次問題
    2023-09-09
  • 利用vue組件實現(xiàn)圖片的拖拽和縮放功能

    利用vue組件實現(xiàn)圖片的拖拽和縮放功能

    這篇文章主要給大家介紹了關(guān)于利用vue組件實現(xiàn)圖片的拖拽和縮放功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • Vue瀏覽器緩存sessionStorage+localStorage+Cookie區(qū)別解析

    Vue瀏覽器緩存sessionStorage+localStorage+Cookie區(qū)別解析

    這篇文章主要介紹了Vue瀏覽器緩存sessionStorage+localStorage+Cookie區(qū)別解析,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • vue寫h5頁面的方法總結(jié)

    vue寫h5頁面的方法總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于vue寫h5頁面的方法以及注意點分析,有需要的朋友們跟著學(xué)習(xí)下吧。
    2019-02-02
  • vue 使用lodash實現(xiàn)對象數(shù)組深拷貝操作

    vue 使用lodash實現(xiàn)對象數(shù)組深拷貝操作

    這篇文章主要介紹了vue 使用lodash實現(xiàn)對象數(shù)組深拷貝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue關(guān)于自定義事件的$event傳參問題

    Vue關(guān)于自定義事件的$event傳參問題

    這篇文章主要介紹了Vue關(guān)于自定義事件的$event傳參問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue?退出登錄?清除localStorage的問題

    vue?退出登錄?清除localStorage的問題

    這篇文章主要介紹了vue?退出登錄?清除localStorage的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論