




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Uniapp全局消息提示以及其組件的實(shí)現(xiàn)方法目錄一、前言二、實(shí)現(xiàn)1.短輪詢請(qǐng)求-App.vue中2.全局消息提示組件(1)定義一個(gè)GlobalMessage.vue組件(2)新建GlobalMessage.js(3)main.js中3.小程序中如何實(shí)現(xiàn)4.vue-inset-loader的使用(1)安裝(2)vue.config.js注入loader(3)pages.json配置文件中添加insetLoader三、總結(jié)
一、前言
最近有項(xiàng)目需求我們能夠在H5及小程序中全局實(shí)時(shí)刷新消息,并且在全局做一個(gè)消息提示,提示組件也需要自定義樣式,首先實(shí)時(shí)消息的刷新無(wú)非有兩種,一種是短輪詢,一種是長(zhǎng)輪詢。
所謂短輪詢,其實(shí)就是前端使用定時(shí)器,在一定間隔時(shí)間內(nèi)向后端發(fā)起請(qǐng)求,并且后端需要對(duì)輪詢請(qǐng)求做優(yōu)化。
長(zhǎng)輪詢則是將消息請(qǐng)求發(fā)送到后端后,請(qǐng)求掛起,等待后端有新消息返回后,再重新發(fā)起消息請(qǐng)求,實(shí)則是一個(gè)websocket通信,鑒于項(xiàng)目上線時(shí)間以及成本,最后選擇短輪詢方式,且全局消息提示在App.vue中進(jìn)行。
二、實(shí)現(xiàn)
1.短輪詢請(qǐng)求-App.vue中
asynccreated(){
const_this=this
setInterval(async()={
constres=await_this.$ajax({
url:`/api/notice/status`
if(res.data.code===200){
constvalue=res.data.data.hasNew
_this.$mit({type:'changeNew',value})
},6000)
}
2.全局消息提示組件
消息請(qǐng)求后需要有一個(gè)全局的自定義組件來(lái)展示消息,但是遇到一個(gè)問(wèn)題,那就是在Unipp中,雖然App.vue是uni-app的主組件,所有頁(yè)面都是在App.vue下進(jìn)行切換的,是頁(yè)面入口文件。但App.vue本身不是頁(yè)面,這里不能編寫視圖元素。這個(gè)文件的作用包括:調(diào)用應(yīng)用生命周期函數(shù)、配置全局樣式、配置全局的存儲(chǔ)globalData。也就是App.vue中只能進(jìn)行js以及css的編寫,而不能掛載視圖元素,那么是否可以在js中像使用this.$message一樣使用組件呢,我想到了Vue中使用totype.$message掛載全局組件的方式。
(1)定義一個(gè)GlobalMessage.vue組件
自定義一個(gè)消息提示組件,text將會(huì)是我們傳入的提示消息參數(shù)
template
div
全局消息提示{{text}}
/div
/template
script
/script
stylelang="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可以使用基礎(chǔ)的Vue構(gòu)造器,創(chuàng)建一個(gè)子類,參數(shù)是一個(gè)包含組件的對(duì)象。對(duì)象示例如下:
{
template:'',
data(){
return{
}
但此時(shí)創(chuàng)建的并非組件實(shí)例,需要通過(guò)new方式創(chuàng)建組件實(shí)例,參數(shù)包括創(chuàng)建的組件Dom節(jié)點(diǎn),組件內(nèi)部屬性。然后使用document.body.appendChild將組件渲染到body中,此時(shí)我們已經(jīng)可以調(diào)用此方法,將自定義組件掛載到全局。
functionshowMessage(text,duration){
constMessageDom=newMessageConstructor({
el:document.createElement('div'),
data(){
return{
text:text,
document.body.appendChild(MessageDom.$el)
}
接下來(lái)我們需要將該方法掛載到vue原型上,從而能夠像this.$message一樣使用,我們?cè)趖otype上掛載$message,并將此方法導(dǎo)出。
functionregistryMessage(){
totype.$message=showMessage
exportdefaultregistryMessage
GlobalMessage.js全部代碼
importvuefrom"vue"
importGlobalMessagefrom'./GlobalMessage.vue';
constMessageConstructor=vue.extend(GlobalMessage)
functionshowMessage(text,duration){
constMessageDom=newMessageConstructor({
el:document.createElement('div'),
data(){
return{
text:text,
document.body.appendChild(MessageDom.$el)
functionregistryMessage(){
totype.$message=showMessage
exportdefaultregistryMessage
(3)main.js中
將我們拋出的方法引入,使用Vue.use進(jìn)行全局注冊(cè),這樣就可以愉快的使用this.$message了。
importGlobalMessagefrom"./GlobalMessage.js";
//這里也可以直接執(zhí)行toastRegistry()
Vue.use(GlobalMessage);
使用
this.$message('測(cè)試數(shù)據(jù)')
3.小程序中如何實(shí)現(xiàn)
超導(dǎo)馬得,剛剛能夠全局使用this.$message,但是又遇到一個(gè)問(wèn)題,小程序中沒(méi)有document,我們看uni-app官方文檔:
uni-app的jsAPI由標(biāo)準(zhǔn)ECMAScript的jsAPI和uni擴(kuò)展API這兩部分組成。
標(biāo)準(zhǔn)ECMAScript的js僅是最基礎(chǔ)的js。瀏覽器基于它擴(kuò)展了window、document、navigator等對(duì)象。小程序也基于標(biāo)準(zhǔn)js擴(kuò)展了各種wx.xx、my.xx、swan.xx的API。node也擴(kuò)展了fs等模塊。
uni-app基于ECMAScript擴(kuò)展了uni對(duì)象,并且API命名與小程序保持兼容。
uni-app的js代碼,h5端運(yùn)行于瀏覽器中。非h5端(包含小程序和App),Android平臺(tái)運(yùn)行在v8引擎中,iOS平臺(tái)運(yùn)行在iOS自帶的jscore引擎中,都沒(méi)有運(yùn)行在瀏覽器或webview里。非H5端,不支持window、document、navigator等瀏覽器的jsAPI
uni-app的jsAPI
那么需求不能不完成,我們采用另外一套方案,使用vuex狀態(tài)機(jī)來(lái)進(jìn)行全局狀態(tài)控制,將自定義組件放在需要的頁(yè)面中,使用狀態(tài)機(jī)來(lái)控制消息的提示內(nèi)容以及展示與隱藏。注:請(qǐng)自行安裝配置vuex。
main.js中全局注冊(cè)組件
importGlobalMessagefrom'@/components/common/GlobalMessage.vue';
Vponent('GlobalMessage',GlobalMessage)
在需要的頁(yè)面放置GlobalMessage組件,但是我們需要每個(gè)頁(yè)面都要加組件標(biāo)簽,實(shí)在是一個(gè)難以忍受的方式,于是在翻閱一些文檔后,在jy文章中發(fā)現(xiàn)一個(gè)工具vue-inset-loader
4.vue-inset-loader的使用
我們來(lái)看該loader的提示:編譯階段在sfc模板指定位置插入自定義內(nèi)容,適用于webpack構(gòu)建的vue應(yīng)用,常用于小程序需要全局引入組件的場(chǎng)景。(由于小程序沒(méi)有開(kāi)放根標(biāo)簽,沒(méi)有辦法在根標(biāo)簽下追加全局標(biāo)簽,所以要使用組件必須在當(dāng)前頁(yè)面引入組件標(biāo)簽),該插件剛好能夠幫助我們?nèi)肿芳咏M件標(biāo)簽。
vue-inset-loader
(1)安裝
npminstallvue-inset-loader--save-dev
(2)vue.config.js注入loader
沒(méi)有vue.config.js請(qǐng)新建文件。
module:{
rules:[
test:/.vue$/,
use:{
loader:"vue-inset-loader"
////針對(duì)Hbuilder工具創(chuàng)建的uni-app項(xiàng)目
//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":"測(cè)試頁(yè)面",
//單獨(dú)配置,用法跟全局配置一致,優(yōu)先級(jí)高于全局
"label":["confirm","abc"],
"rootEle":"div"
]
config(default:{})
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)戶農(nóng)田住宿管理辦法
- 河南造林資金管理辦法
- 核酸采集人員管理辦法
- 短視頻算法優(yōu)化策略-洞察及研究
- 10kV電力貫通線設(shè)計(jì)與施工方案探討
- 莖稈特征及抗倒伏能力影響
- 體育機(jī)構(gòu)管理辦法提綱
- 社會(huì)學(xué)核心理論體系梳理與考核要點(diǎn)解析
- 村屯信息收集管理辦法
- 基層銀行綠色金融實(shí)踐:業(yè)務(wù)推進(jìn)與風(fēng)險(xiǎn)管理研究
- 2025年廣東省中考生物試卷真題(含答案解析)
- 第10課+遼夏金元的統(tǒng)治(大概念教學(xué)課件)2024-2025學(xué)年高一歷史上冊(cè)教學(xué)課件(統(tǒng)編版2019)
- 裝置保運(yùn)方案(3篇)
- 中國(guó)聚丙烯酰胺行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告2025-2028版
- 青年教師教學(xué)工作坊組織計(jì)劃
- 駐非洲員工管理制度
- 工程內(nèi)業(yè)資料管理制度
- 摩托車協(xié)議過(guò)戶協(xié)議書(shū)
- 2025年食品檢驗(yàn)員考試試卷及答案
- 四川省德陽(yáng)市2025年七年級(jí)下學(xué)期語(yǔ)文期末試卷及答案
- 黎族文化課件
評(píng)論
0/150
提交評(píng)論