uni-app實(shí)現(xiàn)全局變量的方式小結(jié)
一、uni-app介紹
uni-app 是一個(gè)使用 Vue.js 開(kāi)發(fā)所有前端應(yīng)用的框架,開(kāi)發(fā)者編寫(xiě)一套代碼,可發(fā)布到 iOS、Android、Web(響應(yīng)式)、以及各種 小程序(微信/支付寶/百度/頭條/飛書(shū)/QQ/快手/釘釘/淘寶)、快應(yīng)用 等多個(gè)平臺(tái)。
uni-app 在開(kāi)發(fā)者數(shù)量、案例、跨端抹平度、擴(kuò)展靈活性、性能體驗(yàn)、周邊生態(tài)、學(xué)習(xí)成本、開(kāi)發(fā)成本等8大關(guān)鍵指標(biāo)上擁有更強(qiáng)的優(yōu)勢(shì)。
二、功能框架圖
從下面 uni-app 功能框架圖可看出, uni-app 在跨平臺(tái)的過(guò)程中,不犧牲平臺(tái)特色,可優(yōu)雅的調(diào)用平臺(tái)專有能力,真正做到海納百川、各取所長(zhǎng)。

三、公用模塊
定義一個(gè)專用的模塊,用來(lái)組織和管理這些 全局的變量 ,在需要的頁(yè)面引入。
注意這種方式只支持多個(gè)vue頁(yè)面或多個(gè)nvue頁(yè)面之間公用,vue和nvue之間不公用。
示例如下:
在 uni-app 項(xiàng)目根目錄下創(chuàng)建 common 目錄,然后在 common 目錄下新建 helper.js 用于定義公用的方法。
const websiteUrl = 'http://uniapp.dcloud.io';
const now = Date.now || function () {
return new Date().getTime();
};
const isArray = Array.isArray || function (obj) {
return obj instanceof Array;
};
export default {
websiteUrl,
now,
isArray
}
接下來(lái)在 pages/index/index.vue 中引用該模塊
import helper from '../../common/helper.js';
export default {
data() {
return {};
},
onLoad(){
console.log('now:' + helper.now());
},
methods: {
}
}
這種方式維護(hù)起來(lái)比較方便,但是 缺點(diǎn) 就是 每次都需要引入 。
四、掛載 Vue.prototype
將一些使用 頻率較高 常量或者方法,直接擴(kuò)展到 Vue.prototype 上,每個(gè) Vue 對(duì)象都會(huì) “繼承” 下來(lái)。
注意這種方式只支持 vue 頁(yè)面
示例如下:
在 main.js 中掛載屬性/方法
Vue.prototype.websiteUrl = 'http://uniapp.dcloud.io';
Vue.prototype.now = Date.now || function () {
return new Date().getTime();
};
Vue.prototype.isArray = Array.isArray || function (obj) {
return obj instanceof Array;
};
然后在 pages/index/index.vue 中調(diào)用
export default {
data() {
return {};
},
onLoad(){
console.log('now:' + this.now());
},
methods: {
}
}
這種方式,只需要在 main.js 中定義好即可在 每個(gè)頁(yè)面 中直接調(diào)用。
Tips
- 每個(gè)頁(yè)面中不要在出現(xiàn)重復(fù)的屬性或方法名。
- 建議在 Vue.prototype 上掛載的屬性或方法,可以加一個(gè)統(tǒng)一的 前綴 。比如 $url、global_url 這樣,在閱讀代碼時(shí)也容易與當(dāng)前頁(yè)面的內(nèi)容區(qū)分開(kāi)。
五、globalData
小程序 中有個(gè) globalData 概念,可以在 App 上聲明 全局變量 。 Vue 之前是沒(méi)有這類概念的,但 uni-app 引入了globalData概念,并且在包括H5、App等平臺(tái)都實(shí)現(xiàn)了。
在 App.vue 可以定義 globalData ,也可以使用 API 讀寫(xiě)這個(gè)值。
- globalData 支持 vue 和 nvue 共享數(shù)據(jù)。
- globalData 是一種比較簡(jiǎn)單的 全局變量 使用方式。
定義:App.vue
<script>
export default {
globalData: {
text: 'text'
},
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style>
/*每個(gè)頁(yè)面公共css */
</style> js中操作 globalData 的方式如下:
- 賦值:getApp().globalData.text = 'test'
- 取值:console.log(getApp().globalData.text) // 'test'
如果需要把 globalData 的數(shù)據(jù)綁定到頁(yè)面上,可在頁(yè)面的 onshow 聲明周期里進(jìn)行變量重賦值。HBuilderX 2.0.3起,nvue頁(yè)面在 uni-app 編譯模式下,也支持 onshow 。
六、Vuex
Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的 狀態(tài)管理 模式。它采用 集中式 存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。
HBuilderX 2.2.5+起,支持vue和nvue之間共享。參考
這里以登錄后同步更新用戶信息為例,簡(jiǎn)單說(shuō)明下 Vuex 的用法,更多更詳細(xì)的 Vuex 的內(nèi)容,建議前往其官網(wǎng) Vuex 學(xué)習(xí)下。
舉例說(shuō)明:
在 uni-app 項(xiàng)目根目錄下新建 store 目錄,在 store 目錄下創(chuàng)建 index.js 定義狀態(tài)值
const store = new Vuex.Store({
state: {
login: false,
token: '',
avatarUrl: '',
userName: ''
},
mutations: {
login(state, provider) {
console.log(state)
console.log(provider)
state.login = true;
state.token = provider.token;
state.userName = provider.userName;
state.avatarUrl = provider.avatarUrl;
},
logout(state) {
state.login = false;
state.token = '';
state.userName = '';
state.avatarUrl = '';
}
}
})然后,需要在 main.js 掛載 Vuex
import {
mapState,
mapMutations
} from 'vuex';
export default {
computed: {
...mapState(['avatarUrl', 'login', 'userName'])
},
methods: {
...mapMutations(['logout'])
}
}
示例操作步驟:
未登錄時(shí),提示去登錄。跳轉(zhuǎn)至登錄頁(yè)后,點(diǎn)擊“登錄”獲取用戶信息,同步更新?tīng)顟B(tài)后,返回到個(gè)人中心即可看到信息同步的結(jié)果。
注意:對(duì)比前面的方式,該方式更加適合處理全局的并且 值會(huì)發(fā)生變化 的情況。
七、注意事項(xiàng)
.vue 和 .nvue 并不是一個(gè)規(guī)范,因此一些在 .vue 中適用的方案并不適用于 .nvue。 Vue 上掛載屬性,不能在 .nvue 中使用。
到此這篇關(guān)于uni-app實(shí)現(xiàn)全局變量的方式小結(jié)的文章就介紹到這了,更多相關(guān)uni-app全局變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript 學(xué)習(xí)筆記(七)字符串的連接
javascript 字符串的連接效率問(wèn)題,需要的朋友可以參考下。2009-12-12
Websocket通信協(xié)議在數(shù)字孿生中的應(yīng)用
這篇文章主要為大家介紹了Websocket通信協(xié)議在數(shù)字孿生中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
JavaScript實(shí)現(xiàn)Sleep函數(shù)的代碼
大家知道,JavaScript中沒(méi)有內(nèi)置我們常用的sleep()函數(shù),只有定時(shí)器setTimeout()和循環(huán)定時(shí)器setInterval()2007-03-03
nest.js 使用express需要提供多個(gè)靜態(tài)目錄的操作方法
這篇文章主要介紹了nest.js 使用express需要提供多個(gè)靜態(tài)目錄的操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
JavaScript判斷數(shù)組是否存在key的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇JavaScript判斷數(shù)組是否存在key的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
js實(shí)現(xiàn)在文本框光標(biāo)處添加字符的方法介紹
在開(kāi)發(fā)應(yīng)用中,經(jīng)常會(huì)遇到一些技術(shù)上的問(wèn)題,比如:怎樣讓js在文本框光標(biāo)處添加字符,本文將以此問(wèn)題進(jìn)行詳細(xì)介紹,需要了解的朋友可以參考下2012-11-11
微信小程序?qū)崿F(xiàn)表格前后臺(tái)分頁(yè)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)表格前后臺(tái)分頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
javascript Array數(shù)組對(duì)象的擴(kuò)展函數(shù)代碼
我們經(jīng)常給 String,Function,Array 的原型加上自定義的擴(kuò)展函數(shù),比如去除字符串空格,數(shù)組排序等2010-05-05

