成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

聊聊使用Uniapp怎么實現全局消息提示及其組件

Uniapp中怎么實現全局消息提示及其組件?下面本篇文章給大家介紹一下Uniapp全局消息提示及其組件的實現方法,希望對大家有所幫助!

聊聊使用Uniapp怎么實現全局消息提示及其組件

最近有項目需求我們能夠在H5及小程序中全局實時刷新消息,并且在全局做一個消息提示,提示組件也需要自定義樣式,首先實時消息的刷新無非有兩種,一種是短輪詢,一種是長輪詢。
所謂短輪詢,其實就是前端使用定時器,在一定間隔時間內向后端發起請求,并且后端需要對輪詢請求做優化。
長輪詢則是將消息請求發送到后端后,請求掛起,等待后端有新消息返回后,再重新發起消息請求,實則是一個websocket通信,鑒于項目上線時間以及成本,最后選擇短輪詢方式,且全局消息提示在App.vue中進行。

實現

1.短輪詢請求-App.vue中

   async created(){const _this=thissetInterval(async ()=>{                 const res=await _this.$ajax({                                 url:`/api/notice/status`               })                            if(res.data.code===200){                 const value=res.data.data.hasNew 		_this.$store.commit({type: 'changeNew', value})               }          },6000)	     }

2.全局消息提示組件

消息請求后需要有一個全局的自定義組件來展示消息,但是遇到一個問題,那就是在Unipp中, 雖然App.vue是uni-app的主組件,所有頁面都是在App.vue下進行切換的,是頁面入口文件。但App.vue本身不是頁面,這里不能編寫視圖元素。這個文件的作用包括:調用應用生命周期函數、配置全局樣式、配置全局的存儲globalData。也就是App.vue中只能進行js以及css的編寫,而不能掛載視圖元素,那么是否可以在js中像使用this.$message一樣使用組件呢,我想到了Vue中使用vue.prototype.$message掛載全局組件的方式。

(1)定義一個GlobalMessage.vue組件

自定義一個消息提示組件,text將會是我們傳入的提示消息參數

<template> 	<div class='message-container'> 		全局消息提示 {{text}} 	</div> </template>  <script></script>  <style lang="scss" scoped> 	.message-container{ 		position: fixed;		 		top: 10%;		 		z-index: 2000;		 		left: 10%;		 		width: 200px;		 		height: 200px;		 		background-color: red; 	} </style>

(2)新建GlobalMessage.js

將自定義組件引入,vue.extend可以使用基礎的Vue構造器,創建一個子類,參數是一個包含組件的對象。對象示例如下:

{ template:'', data(){     return {         屬性     }   } }

但此時創建的并非組件實例,需要通過new 方式創建組件實例,參數包括創建的組件Dom節點,組件內部屬性。然后使用document.body.appendChild將組件渲染到body中,此時我們已經可以調用此方法,將自定義組件掛載到全局。

function showMessage(text,duration){ 	const MessageDom=new MessageConstructor({ 		el:document.createElement('div'),data(){ 			return {text:text, 			} 		} 	})document.body.appendChild(MessageDom.$el) }

接下來我們需要將該方法掛載到vue原型上,從而能夠像this.$message一樣使用,我們在vue.prototype上掛載$message,并將此方法導出。

function registryMessage(){ 	vue.prototype.$message=showMessage } export default registryMessage

GlobalMessage.js全部代碼

import vue from "vue" import GlobalMessage from  './GlobalMessage.vue'; const MessageConstructor= vue.extend(GlobalMessage) function showMessage(text,duration){ 	const MessageDom=new MessageConstructor({ 		el:document.createElement('div'),data(){ 			return {text:text, 			} 		} 	}) 	document.body.appendChild(MessageDom.$el) } function registryMessage(){ 	vue.prototype.$message=showMessage } export default registryMessage

(3)main.js中

將我們拋出的方法引入,使用Vue.use進行全局注冊,這樣就可以愉快的使用this.$message了。

import GlobalMessage from "./GlobalMessage.js"; // 這里也可以直接執行  toastRegistry()Vue.use(GlobalMessage);

使用

this.$message('測試數據')

3.小程序中如何實現

超導馬得,剛剛能夠全局使用this.$message,但是又遇到一個問題,小程序中沒有document,我們看uni-app官方文檔:

uni-app的js API由標準ECMAScript的js API 和 uni 擴展 API 這兩部分組成。
標準ECMAScript的js僅是最基礎的js。瀏覽器基于它擴展了window、document、navigator等對象。小程序也基于標準js擴展了各種wx.xx、my.xx、swan.xx的API。node也擴展了fs等模塊。
uni-app基于ECMAScript擴展了uni對象,并且API命名與小程序保持兼容。
uni-app的js代碼,h5端運行于瀏覽器中。非h5端(包含小程序和App),Android平臺運行在v8引擎中,iOS平臺運行在iOS自帶的jscore引擎中,都沒有運行在瀏覽器或webview里。非H5端,不支持window、document、navigator等瀏覽器的js API

uni-app的js API

那么需求不能不完成,我們采用另外一套方案,使用vuex狀態機來進行全局狀態控制,將自定義組件放在需要的頁面中,使用狀態機來控制消息的提示內容以及展示與隱藏。注:請自行安裝配置vuex。

main.js中全局注冊組件

import GlobalMessage from '@/components/common/GlobalMessage.vue'; Vue.component('GlobalMessage',GlobalMessage)

在需要的頁面放置GlobalMessage組件,但是我們需要每個頁面都要加組件標簽,實在是一個難以忍受的方式,于是在翻閱一些文檔后,在jy文章中發現一個工具vue-inset-loader

4.vue-inset-loader的使用

我們來看該loader的提示:編譯階段在sfc模板指定位置插入自定義內容,適用于webpack構建的vue應用,常用于小程序需要全局引入組件的場景。(由于小程序沒有開放根標簽,沒有辦法在根標簽下追加全局標簽,所以要使用組件必須在當前頁面引入組件標簽),該插件剛好能夠幫助我們全局追加組件標簽。

vue-inset-loader

(1)安裝

npm install vue-inset-loader –save-dev

(2)vue.config.js注入loader

沒有vue.config.js請新建文件。

module: {     rules: [       {                   test: /.vue$/,         use:{                     loader: "vue-inset-loader"                          // // 針對Hbuilder工具創建的uni-app項目                          // loader: path.resolve(__dirname,"./node_modules/vue-inset-loader")         }       }     ] }, // 支持自定義pages.json文件路徑 // options: { //     pagesPath: path.resolve(__dirname,'./src/pages.json') // }

(3)pages.json配置文件中添加insetLoader

"insetLoader": {     "config":{         "message": "<GlobalMessage></GlobalMessage>",         },     // 全局配置     "label":["confirm"],     "rootEle":"div" }, "pages": [     {         "path": "pages/tabbar/index/index",         "style": {             "navigationBarTitleText": "測試頁面",             // 單獨配置,用法跟全局配置一致,優先級高于全局             "label": ["confirm","abc"],             "rootEle":"div"         }     }, ]
  1. 配置說明
  • config (default: {}) 定義標簽名稱和內容的鍵值對
  • label(default: []) 需要全局引入的標簽,打包后會在所有頁面引入此標簽
  • rootEle(default: "div") 根元素的標簽類型,缺省值為div,支持正則,比如匹配任意標簽 ".*"

labelrootEle 支持在單獨頁面的style里配置,優先級高于全局配置

總結

雖然實現了全局消息的提示,但是在小程序中,該方法還是過于麻煩,需要在每個頁面追加全局組件標簽,希望大家有更好的方法能夠不吝賜教。

推薦:《uniapp教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久婷婷成人综合色综合| 亚洲无人区码一码二码三码的含义| 日本乱人伦AⅤ精品| 公交车挺进朋友人妻的身体里| 亚洲AⅤ无码乱码在线观看性色| 国产 校园 另类 小说区| 亚洲成A人片在线观看WWW| 免费体验120秒视频| 波多野成人无码精品电影| 香蕉成人伊视频在线观看| 国产精品无码综合区| 日本高清在线一区二区三区| 国产亚洲精久久久久久无码7| 日本真人裸交试看120秒| 高h乱好爽要尿了潮喷了| 无码少妇一区二区三区芒果| WINDOWS乱码的乱码大全| 性色ΑV一二三天美传媒| 好大好湿好硬顶到了好爽视频| 69无人区卡一卡二卡| 亚洲Ⅴ国产V天堂A无码二区| 精品无人区麻豆乱码1区2区新区| 亚洲第一成人网站| 人人爽人人模人人人爽人人爱| 狠狠人妻久久久久久综合蜜桃| 宝贝你的奶好大我想吃| 一二三四在线观看免费中文| 翘臀后进呻吟喷水的少妇| 精品少妇无码AV在线播放| 成人做受120视频试看| 亚洲 欧美 激情 另类 校园| 日本三级欧美三级人妇视频黑白配| 久久国产成人午夜AV影院| 国产精品无码A∨精品影院| 亚洲精品456在线播放| 女儿儿媳陪自己玩的心情说说| 国产亚洲精品在AV| 成人免费午夜无码视频| 37大但文体艺术A级都市天气 | 亚洲AV无码成人精品区毛片| 免费乱码人妻系列无码专区| 久久99久久99小草精品免视看| 亚洲HAIRY多毛PICS大全| 秋霞国产成人精品午夜视频APP| 久久久久免费看成人影片| 国产午夜成人免费看片| 夫では満足できない人妻| A级国产乱理伦片在线观看| 中文在线中文资源| 影视AV久久久噜噜噜噜噜三级| 亚洲国产精品无码中文字满| 亚洲成AV人片在WWW色猫咪| 日本熟妇人妻XXXXX| 日韩AV无码一区二区三区| 久章草在线毛片视频播放| 国产香蕉国产精品偷在线| 成人亚洲区无码区在线点播| 成人欧美一区二区三区视频 | 国产精品综合色区在线观看| 国产剧情AV麻豆香蕉精品| 国产精品亚洲综合网熟女| 成人免费AV一区二区三区| 99久久久国产精品免费| 别揉我奶头~嗯~啊~免费视频| 草草影院CCYY国产日本欧美| XXX.日本学生妹.COM| 丰满性熟妇ⅩXXOOOZZX| 一本一道波多野毛片结衣AV黑人 | H工口全彩里番库18禁无遮挡| 亚洲国产精品无码成人片久久| 麻豆国内剧情AV在线素人搭讪| 美女高潮无遮挡喷水视频| 欧美日韩一区二区三区精品视频| 好吊色欧美一区二区三区四区| 极品少妇高潮XXXXX| 久久综合激的五月天的歌词 | 亚洲性啪啪无码AV天堂| 一区二区三区乱码在线 | 中文| 亚洲日韩亚洲另类激情文学| 伊人久久亚洲综合AV影院| 把腿张开老子臊烂你多P| 国产精品无码A∨麻豆| 国产麻豆一精品一AV一免费软件| 国产精品久久久久久无码| 精品国产免费人成网站| 久久亚洲国产成人精品无码区| 人妻熟妇久久久久久精品无码专区| 婷婷五月综合缴情在线视频| 女邻居给我口爆18P| 色噜噜噜亚洲男人的天堂 | 京东影业JD008苏小小| 美女张开双腿久久久久久| 蜜桃中文字日产乱幕4区| 欧美高清精品一区二区| 色欲蜜臀av无码久久浪潮一区| 亚洲国产AV高清无码| 亚洲午夜久久久久久噜噜噜| 。国产精品麻豆成人AV网| 亚洲一区二区无码偷拍| 肥老熟妇伦子伦456视频| 好吊妞国产欧美日韩免费观看| 欧美日韩人妻一区二区三区| 亚洲AV无码国产一区二区三区不 | 国产精品久久毛片| 久爱无码精品免费视频在线观看| 日本强伦姧人妻一区二区| 亚洲精品无码久久久久Y| 赤裸人妻撅起肥白大屁股| 久久婷婷综合缴情亚洲狠狠| 性一交一乱一伦一在线小视频| А∨天堂一区一本到| 久久亚洲AⅤ精品网站| 亚洲av成人网站| 啊轻点灬大JI巴太粗太长了欧美| 久久久噜噜噜久久熟女| 亚洲 欧美 激情 小说 另类| 顶级RAPPER潮水日本| 免费看撕开奶罩揉吮奶头视频| 武则天裸毛片70分钟| 丰满妇女伦大片免费| 人妻无码久久久久久久久久久| 亚洲AV素人乱码| 粗大的内捧猛烈进出小视频| 欧美精品偷自拍另类在线观看| 亚洲卡1卡2乱码新区仙踪| 国产午夜成人无码一区二区| 无码成人一区二区| 99久久综合狠狠综合久久| 免费人成网WW555KKK在线| 亚洲国产成人精品无码区在线观看| 国产精品免费AⅤ片在线观看| 色偷偷色噜噜狠狠网站30根| 18禁黄污无遮挡无码网站| 精品国产乱码久久久久久软件大全| 欧美猛少妇色XXXXⅩ| 亚洲国产AV无码一区二区三区 | 黑人玩弄人妻一区二区三区| 新妺妺窝人体色WWW| 被喂春药蹂躏的欲仙欲死视频| 奶头又大又白喷奶水AV| 1—36集电视剧免费观看36集 | 久久无码人妻丰满熟妇区毛片| 亚洲AV综合色区无码一区| 激情偷乱人伦小说视频最新章节| 日韩一卡2卡3卡4卡| 国产精华液一区二区区别大吗| 久久久久成人精品| 亚洲日韩中文无码久久| 好硬好大好爽18禁免费看男男| 亚洲国产AV无码专区亚洲AV| 国产精品无码AV不卡| 亚洲精品中文字幕乱码三区| 老熟女HDXX中国老熟女| JEALOUSVUE成熟少归| 女人自熨全过程直播| 大伊香蕉精品一区视频在线| 肉感妇BBWBBWBBWBBW| 国产午夜视频在线观看720P| 亚洲人成网站18禁止影院| 色WWW亚洲国产阿娇| 国产欧美成AⅤ人高清| 无码精品人妻一区二区三区aV | 久久精品国产欧美日韩| 坐公交车居然被弄了2个小时| 人人妻人人澡人人爽欧美二区| JEAⅠOUSVUE丰满少妇| 无码人妻aⅴ一区二区三区99| 韩国V欧美V亚洲V日本| 2021韩剧在线观看韩剧网| 欧美性猛交内射兽交老熟妇| 国产精品一线二线三线精华液| 男女啪啪进出阳道猛进| 无码专区国产精品第一页| 精品国产乱码久久久久久人妻| 中国东北熟女老太婆内谢| 日本人和NEWBALANCE| 含羞草传媒入口免费网站腾讯网| 伊人久久大香线蕉亚洲五月天| 三上悠亚AV影院在线看| 国产精品69人妻无码久久久| 国产美足白丝榨精在线观看sm| 亚洲乱码无码永久不卡在线| 日本精品VIDEOSSEX 黑| 国模少妇一区二区三区咪咕| CHINESE裸体男野外GAY| 亚洲欧美综合区自拍另类| 日本熟妇在线一区二区三区| 国产日韩综合一区二区性色AV| 99久久免费国产精品四虎99久久精品免费看国产一区二区 | 国产成人无码VA在线观看| 中文字幕不卡乱偷在线观看| 亚洲 欧美 国产 动漫 综合| 人妻少妇粗大持久满足| 久久综合激的五月天的歌词| 国产成人无码综合亚洲日韩| 77777亚洲午夜久久多人| 亚洲日本VA午夜在线影院| 未满十八18禁止午夜免费网站| 人妻互换一二三区激情视频| 美女把尿口扒开让男人桶|