一、在utils下新建文件globalPage.js 其作用如下
- 自动设置全局数据:在页面加载时,自动将一些全局数据(如主题数据、系统信息等)设置到当前页面。
- 提供主题更新方法:通过
setThemeChange方法,可以在页面中方便地更新主题数据。
module.exports = function (app) {
const originalPage = Page;
Page = function (config) {
const {
onLoad
} = config;
config.onLoad = function (onLoadOptions) {
if (typeof onLoad === 'function') {
this.setData({
themeData: app.globalData.themeData,
})
onLoad.call(this, onLoadOptions)
}
}
config.setThemeChange = function (){
this.setData({
themeData: app.globalData.themeData
})
}
return originalPage(config)
}
}
二、在app.js中写对应方法,配合globalPage.js,将数据存储在全局中
-
获取主题:
- 使用
setTimeout模拟异步获取主题数据的过程。在实际应用中,你可以使用wx.request或其他网络请求方法来获取主题数据。
- 使用
-
构建主题字符串:
themes对象包含了各种主题颜色的键值对。- 使用
for...in循环遍历themes对象,将每个键值对转换成 CSS 变量的字符串格式,并存储在themeString中。
-
存储主题数据:
- 将构建好的
themeString存储在globalData.themeData中,以便在整个应用中访问。
- 将构建好的
-
通知应用更新主题:
- 调用
noticeSetThemes方法,通知应用更新主题样式。这个方法需要你在App实例中定义,用于更新应用的样式。
- 调用
const globalPage = require('utils/globalPage.js');
//globalData: {
// themeData:'',
// },
// 通知应用更新主题
noticeSetThemes: function () {
let pages = getCurrentPages();
if (pages.length >= 1) {
pages.forEach(item => {
item.setThemeChange(this.globalData.themeData)
})
}
},
// 模拟获取主题接口
async getTheme() {
setTimeout(() => {
const themes = {
'--main-color': '#3D7770',
'--sub-color':'#bada55',
'--page-background-color':'#f6f1eb',
}
let themeString = ''
for (let key in themes) {
themeString += `${key}: ${themes[key]}; `
}
this.globalData.themeData = themeString
this.noticeSetThemes()
}, 200)
},
三、具体使用
在wxml文件
最顶级view标签
<view style="{{themeData}}">
.....
</view>
完成以上步骤,那么wxss文件就可以使用css变量来使用
.button {
color:var(--main-color)
}