成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
亚洲字幕AV一区二区三区四区| 亚洲欧洲无卡二区视頻| 亚洲A∨国产AV综合AV网站| 亚洲 都市 无码 校园 激情| 亚洲AV无码国产精品永久一区| 亚洲国产成人AV在线电影播放| 野花日本视频免费观看3| 中文字幕人妻互换激情| JULIA无码中文字幕一区| 被客人玩得站不起来大前端| 国产播放隔着超薄丝袜进入| 国产强被迫伦姧在线观看无码 | 亚洲AV成人无码精品综合网站| 亚洲国产成人久久综合碰| 伊人久久大香线蕉AV一区| 99久久精品午夜一区二区| 成人午夜亚洲精品无码网站| 国产精品原创AV片国产日韩| 精品少妇人妻AV免费久久久| 免费日韩无人区码卡二卡3卡| 秋霞手机在线看秋免费| 无码AV高潮喷水无码专区线| 亚洲人成人无码网WWW国产| 99久RE热视频这只有精品6| 国产69精品久久久久777| 激情综合婷婷丁香五月尤物| 美女扒开尿眼给男人桶爽网站免费| 欧美人与动性XXXXBBBB| 天天躁日日躁狠狠躁退| 亚洲天堂无码高清高潮| JAPANESE少妇高潮潮喷| 国产精品无码V在线观看| 久久久综合香蕉尹人综合网| 日本成AⅤ人片日本伦| 亚洲AV成人无码精品网站色欲| 在公车被灌满JING液| 丰满少妇XXXⅩBBBB视频| 精品成人乱色一区二区| 欧美人妻少妇精品视频专区 | 欧美伊人久久大香线蕉综合 | 日本丰满护士爆乳XXXX无遮挡| 午夜影视啪啪免费体验区入口| 中国老熟女重囗味HDXX| 国产A在亚洲线播放| 久久久精品人妻一区亚美研究所 | 国产成人年无码AV片在线观看| 久久精品国产亚洲AV嫖农村妇女| 日本丰满人妻熟妇BBBBB| 亚洲国产成人高清在线观看 | 国产伦久视频免费观看视频| 黎朔缠着腰不让他退出微博| 天天狠天天透天干天天怕| 又色又爽又黄的视频软件APP| 高潮和狂野射精合集| 久久综合给合久久狠狠狠97色| 色综合久久久久综合一本到桃花网 | 国产偷国产偷精品高清尤物| 中文字幕无码一线二线三线| 国产AⅤ无码旗袍丝袜美腿| 久久无码精品一区二区三区| 舌头伸进去里面吃小豆豆| 影音先锋手机AV资源站| 国产精品视频一区二区三区不卡| 男女超爽视频免费播放| 亚洲 中文字幕 日韩 无码| あざらしそふと官网| 精品国产三级A∨在线| 色诱视频在线观看| 中文字幕人妻AV一区二区| 国产欧美一区二区精品久久久| 欧美日韩综合精品一区二区| 亚洲精品国产AⅤ成拍色拍| 国产97色在线 | 亚洲| 男人扒开女人下面猛进猛出| 亚洲AV无码一级毛片少妇| 成人免费无码H黄网站WWW| 里番ACG★同人里番本子大全| 香蕉免费一区二区三区| 不收费的十大免费好用的软件| 久久亚洲精品国产精品| 亚欧免费无码AⅤ在线观看| 八戒电影电影网电影网| 久久人人爽人人爽人人片AV不| 无人区码一码二码高高| 八戒八戒神马影院在线观看| 麻豆国产一卡二卡三卡| 亚洲妇女水蜜桃AV网网站| 国产999精品久久久久久| 欧美日韩精品成人网站二区A∨有| 亚洲日韩精品A∨片无码| 国产剧情AV麻豆香蕉精品| 日本真人边吃奶边做爽动态图| 中文字幕人妻无码系列第三区| 精品久久久久中文字幕APP| 我趁老师喝醉后玩弄她的身体 | 国产欧美日韩精品丝袜高跟鞋| 日本一卡2卡3卡4卡| 2018午夜福利| 久久夜色精品国产噜噜| 亚洲成AⅤ人片久青草影院| 国产精品久久久久影院亚瑟妓| 日韩AV在线一区二区| AV无码精品一区二区三区宅噜噜 | 亚州中文字幕无码中文字幕| 丰满老熟好大BBBXXX| 强壮公弄得我次次高潮| 1000部啪啪未满十八勿入不卡| 久久国语露脸国产精品电影| 亚洲AV无码一区二区三区大黄瓜 | 无码人妻久久一区二区三区免费 | 乱子伦农村XXXXBBB| 亚洲日本VA一区二区三区| 极品VPSWINDOWS少妇| 性饥渴老妇XXXⅩOOO| 国产精品丝袜无码不卡一区| 少妇与大狼拘作爱| 丰满妇女强高潮ⅩXXX| 日韩欧洲在线高清一区| 锕锕锕锕锕锕锕好大污下载 | 抖抈APP入口免费| 日产乱码一二三区别免费一| А√天堂网WWW最新版地址| 欧美 日韩 国产 成人 在线观看| 中文字幕乱码亚洲无线码| 乱中年女人伦AV三区| 月光影院在线观看免费直播| 久久人人玩人妻潮喷内射人人| 亚洲性色成人AV天堂| 久久青青草原精品国产| 又粗又大内射免费视频小说| 鲁鲁夜夜天天综合视频| 中文字幕乱码一区二区免费| 免费无码高潮流白浆视频| 99精品久久99久久久久| 欧美亚洲精品中文字幕乱码| 芭乐小猪幸福宝丝瓜草莓官网| 人人妻人人爽人人狠狠| 成人熟女视频一区二区三区| 日日摸夜夜添狠狠添欧美| 国产99久久久久久免费看| 玩弄漂亮少妇高潮白浆| 国产日韩AV无码免费一区二区三 | 波多野结衣的影片| 色噜噜AV男人的天堂| 国产AV熟女一区二区三区| 无码精品视频一区二区三区| 国产美女久久精品香蕉| 亚洲爆乳精品无码一区二区三区| 精品日产卡一卡二卡927| 永久免费AⅤ无码网站国产| 女的被弄到高潮娇喘喷水视频| JAPANESEMATURE亲| 日韩熟妇无码字幕视频毛片| 国产精品不卡无码AV在线播放| 亚洲AV噜噜在线成人网站女同| 皇上撞着小公主的小说叫什么| 野花高清在线观看免费官网| 你太紧了真舒服小说| 成人每日更新在线不卡| 无码中文字幕AV免费放软件| 狠狠躁狠狠躁东京热无码专区| 亚洲欧美另类在线观看| 免费中文无码AV动作片| 草莓视频18在线在线播放| 图片区小说区AV区| 精品久久久久成人码免费动漫| 在厨房我撕开岳的丁字裤| 日本Α片无遮挡在线观看| 国产成人影院一区二区三区| 亚洲国产精品成人网址天堂| 麻豆E奶女教师国产精品| 苍井空张开腿实干12次| 午夜理论片福利在线观看| 久久精品无码免费不卡| A级国产乱理伦片在线播放| 少妇无力反抗慢慢张开双腿| 极品人妻系列少妇系列| 中国熟妇人妻XXXXX中文| 日本熟老太日本老熟网站| 国产在线精品一区二区| 中国熟妇色XXXXX中国老妇| 入禽太深免费视频| 狠狠色婷婷久久一区二区| 666西方大但人文艺术| 少妇高潮毛片免费看| 久久99国产精品99蜜桃| CHINESE老女人老熟妇HD| 无码人妻精品一区二区三18禁| 久久精品国产亚洲AV网站| GOGO全球高清大胆国模摄影| 午夜DJ免费完整在线看网| 狼人香蕉毛片AV高潮视频| 丁香色婷婷国产精品视频| 亚洲精品无码久久久久| 人伦片无码中文字| 黑人巨大高潮喷水AV| JEAⅠOUSVUE成熟少归A| 亚洲AV秘 无码一区二区三密桃| 男配每天都在体内成结节| 国产精品视频一区二区三区四 |