vue全局掛載實現APP全局彈窗的示例代碼
需求背景
app端對接網頁端的客服系統,在用戶實現網頁客戶系統發起詢問時,app不論在哪個頁面都需要彈窗提示
需求分析
這個需求分為兩步,一個是負責雙向實時通信,一個是全局顯示。雙向實時通信我們可以利用socket來實現,具體內容不展開(後續看情況再出一篇),本文主要講全局顯示。
代碼展示
首先是寫個彈窗組件,這裡給出個demo。如下
<template> <view class="transferPopup-wrap" style="transform: translateY(-200px)" > <view class="transferPopup-topContent"> <text class="transferPopup-status">組內轉接</text> <text class="transferPopup-from" >渠道組陳志成 將匿名客戶03(廈門)轉接給你</text > </view> <view class="transferPopup-reason"> 轉接原因:該客戶想購買服務,請及時接待! </view> </view> </template> export default { data () { return { timer: '' } }, methods: { openPopup () { setTimeout(() => { //transferPopup-wrap_in class的作用是translateY置為0 document.querySelector('.transferPopup-wrap').classList.add('transferPopup-wrap_in') }, 0) //設置定時任務,三秒無操作自動消失 this.timer = setTimeout(() => { this.closePopup() }, 3000) }, closePopup () { //清除定時器 clearTimeout(this.timer) //實現從下往上消失,隱藏後移除該元素 document.querySelector('.transferPopup-wrap').classList.remove('transferPopup-wrap_in') setTimeout(() => { document.body.removeChild(document.querySelector('.transferPopup-wrap')) }, 550) } } }
註意有個transform: translateY(-200px)
和transferPopup-wrap_in
class,這是為瞭模擬彈窗出現時從上往下滑動的動畫(參考微信qq)
接下來隻要把這個組件掛載到vue原型,就可以在任何地方使用且無需引入,主要利用vue.extend
首先,先在該組件同級目錄建立index.js
,內容如下
import vue from 'vue' // 這裡就是我們剛剛創建的那個靜態組件 import toastComponent from './index.vue' // 返回一個 擴展實例構造器 const ToastConstructor = vue.extend(toastComponent) toastComponent.install = function () { const toastDom = new ToastConstructor({}) //掛載到添加的div上 toastDom.$mount(document.createElement('div')) //div添加到body裡 document.body.appendChild(toastDom.$el) return toastDom } export default toastComponent
然後在main.js引入,即可實現
import Vue from 'vue' import transferPopup from "@/components/transferPopup/index.js"; // 全局彈窗轉接提示組件 Vue.prototype.$transferPopup = transferPopup.install;
然後在其他文件就可以通過this.$transferPopup().openPopup('組內轉接')
調用組件的方法
到此這篇關於vue全局掛載實現APP全局彈窗的示例代碼的文章就介紹到這瞭,更多相關vue APP全局彈窗內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!