知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
小程序全局mixin方法
發(fā)表時(shí)間:2021-1-4
發(fā)布人:葵宇科技
瀏覽次數(shù):146
最近接到一個(gè)需求,希望我這邊可以后臺(tái)配置微信小程序的導(dǎo)航欄顏色,但是目前小程序還不支持全局修改導(dǎo)航欄的顏色,只支持修改單個(gè)頁(yè)面的導(dǎo)航欄顏色,所以我就想著能不能在所有的頁(yè)面的onload函數(shù)中手動(dòng)設(shè)置一下導(dǎo)航欄的顏色,但是這樣一來(lái)就需要改每個(gè)頁(yè)面,效率太低。我查了微信小程序的文檔也沒(méi)有提供全局混入onload的方法,所以想著能否實(shí)現(xiàn)一下小程序的混入功能。
問(wèn)題在vue當(dāng)中我們可以使用mixin來(lái)混入全局的配置,方便我們進(jìn)行業(yè)務(wù)開(kāi)發(fā)。但是微信小程序并未提供類似的mixin功能,使得在某些全局修改的業(yè)務(wù)場(chǎng)景下,增加了我們的任務(wù)量。下面介紹一種可以小程序中使用的全局mixin方案。
原理原理也很簡(jiǎn)單,通過(guò)修改Page函數(shù)來(lái)實(shí)現(xiàn)全局的mixin。因?yàn)槲⑿判〕绦蛑袆?chuàng)建頁(yè)面是使用Page構(gòu)造函數(shù)來(lái)創(chuàng)建的,如下:
Page({
data: {
text: "This is page data."
},
onLoad: function(options) {
// Do some initialize when page load.
},
onShow: function() {
// Do something when page show.
},
onReady: function() {
// Do something when page ready.
}
//省略部分代碼 ... ...
})
復(fù)制代碼
那么我們可以將Page改為我們自定義的對(duì)象,通過(guò)下面的混入的方式,實(shí)現(xiàn)在不同的鉤子函數(shù)中mixin我們的全局的配置。例如:我們想要在所有頁(yè)面的onload事件中執(zhí)行代碼console.log('小程序全局mixin'),以下為參考代碼
目錄結(jié)構(gòu)
const page = Page;
import app from '../../app.js';
module.exports = (options = {}) => {
const { onLoad, onShow, onReady, data } = options; // 解構(gòu)傳入的page數(shù)據(jù)
const mountOptions = {
data: {
...data
},
onLoad(...res) {
// 在這里添加 onLoad 前mixin的代碼
console.log('小程序全局mixin');
const opts = res[0];
const $opts = {};
this.$opts = $opts;
if (onLoad) {
onLoad.apply(this, res);
}
// 在這里添加 onLoad 后mixin的代碼
},
onShow() {
// onShow before
if (onShow) {
onShow.apply(this);
}
// onShow after
},
onReady() {
if (onReady) {
onReady.apply(this);
}
},
};
return page(Object.assign({}, options, mountOptions)); // 調(diào)用原生的Page構(gòu)造函數(shù)
};
復(fù)制代碼
編寫統(tǒng)一的全局配置掛載函數(shù)
index.js 文件const page = require('./page.js');
module.exports = {
mount() {
Page = page;
},
};
復(fù)制代碼
執(zhí)行掛載函數(shù),注意必須要在App()之前調(diào)用
app.js//省略部分代碼
require('./mixins/global/index.js').mount(); // 就是上面的index.js文件位置
App({
//省略部分代碼
})
復(fù)制代碼
結(jié)果
同樣的道理我們還可以添加組件全局Mixin的功能,同樣也是要改寫Component函數(shù),這里只給一個(gè)思路,目前項(xiàng)目中還沒(méi)有這樣的業(yè)務(wù)場(chǎng)景
總結(jié)微信小程序中App、Page和Component都是全局的對(duì)象,就像是瀏覽器環(huán)境中的window對(duì)象,我們可以對(duì)其進(jìn)行擴(kuò)展來(lái)滿足業(yè)務(wù)的開(kāi)發(fā)需求,但是要謹(jǐn)慎考慮清楚再改,不然會(huì)為日后的開(kāi)發(fā)留下隱患
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)靠譜公司
- 楚雄小程序開(kāi)發(fā)
- 小程序開(kāi)發(fā)公司
- 昆明網(wǎng)站設(shè)計(jì)
- 網(wǎng)站建設(shè)公司哪家好
- 汽車拆解管理系統(tǒng)
- 昆明小程序哪家好
- painter
- 云南網(wǎng)站制作哪家好
- 汽車報(bào)廢回收管理系統(tǒng)
- 網(wǎng)站搭建
- 小程序開(kāi)發(fā)聯(lián)系方式
- 北京小程序制作
- 前端開(kāi)發(fā)
- 云南小程序制作
- 云南網(wǎng)站建設(shè)方案 doc
- 云南網(wǎng)站建設(shè)高手
- 霸屏推廣
- 云南網(wǎng)站開(kāi)發(fā)哪家好
- 模版消息
- 網(wǎng)絡(luò)公司
- 昆明網(wǎng)站制作
- 云南省城鄉(xiāng)建設(shè)廳網(wǎng)站
- 網(wǎng)絡(luò)公司排名
- 云南小程序開(kāi)發(fā)公司推薦
- 文山小程序開(kāi)發(fā)
- 商標(biāo)
- 昆明軟件公司
- 網(wǎng)站開(kāi)發(fā)哪家好
- 網(wǎng)站制作