当前位置: 首页 > news >正文

vue3:uniapp全局颜色变量配置思路:使用js变量

最开始的思路是创建scss文件,使用$定义变量,像这样:

$primary-color: #ff5500;
$secondary-color: #52c41a;

然后在uni.scc文件里全局引入

@import "@/styles/variables.scss";

在vue文件里使用

<style lang="scss" scoped>.title {font-size: 36rpx;color:$primary-color;}
</style>

至此一切顺利,但是!后来我想改变确定对话框里确定按钮的颜色,取primary-color的值。

<script setup>const click = ()=> {uni.showModal({title:'请查看确认按钮为的颜色',confirmColor:'#ff5500'})}
</script>

查阅了很多博客和资料,大多数都是说要创建一个variables.module.scss文件,文件内容如下:

$primary-color: #ff5500;
$secondary-color: #52c41a;:export {primaryColor: $primary-color;secondaryColor: $secondary-color;
}

然后在vite.config.js(uniapp需要手动创建vite.config.js文件)里配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],css: {preprocessorOptions: {scss: {javascriptEnabled: true,// 全局注入 SCSS 变量文件additionalData: `@import "./styles/variables.module.scss";`}}}
})

然后在vue文件的style里用$方法获取变量值。

<style lang="scss" scoped>.title {font-size: 36rpx;color:$primary-color;}
</style>

如果要在script里使用,就引入import variables from '../../styles/variables.module.scss'

import variables from '../../styles/variables.module.scss'
const color = variables.primaryColor

但是,这样一顿操作后,开始报重复引入的错误,这也不奇怪,毕竟已经在vite.config.js里引入了,然后又在vue页面里引入了一遍。各种尝试后,我决定放弃这个方案。

放弃全局引入,直接在需要变量的vue文件里引入:

<template><view><text class="title">{{title}}</text><view>{{color}}</view><button @click="click">查看颜色</button></view>
</template><script setup>import { ref } from 'vue'import variables from '../../styles/variables.module.scss'const title = ref('hello uniapp vue3')const color = variables.primaryColorconst click = ()=> {uni.showModal({title:'请查看确认按钮为的颜色',confirmColor:color})}
</script><style lang="scss" scoped>.title {font-size: 36rpx;color: v-bind(color);}
</style>

非常完美,是我想要的效果,这个变量值在template、script和style里都能使用。

进一步,我又开始琢磨全局引入的事情,deepseek告诉我,要现在main.js里引入,并且还要配合provide/inject。

import App from './App'
import variables from './styles/variables.module.scss'
import { createSSRApp } from 'vue'export function createApp() {const app = createSSRApp(App)// 使用provide提供全局变量app.provide('$variables', variables)return {app}
}

vue文件里使用

<script setup>import { ref, inject } from 'vue'const variables = inject('$variables')const title = ref('hello uniapp vue3')const color = variables.primaryColorconst click = ()=> {uni.showModal({title:'请查看确认按钮为的颜色',confirmColor:color})}
</script>

局部引入只需要一句话,而全局引入完全没让步骤变少!所有果断放弃全局引入。

我思考了还有没有进一步优化空间:

variables.module.scss的本质还是将其转换成js变量,供vue文件使用,并且维护变量的时候,scss变量必须手动去export,容易遗漏。

既然最终是要使用js变量,何不直接在js文件里定义变量?

创建variables.js文件:

const variables = {primaryColor:'#ff5500',secondaryColor:'#52c41a'
}
export default variables

这样写,变量就方便维护了。

还是在vue文件里局部引入:

<template><view><text class="title">{{title}}</text><view>{{color}}</view><button @click="click">查看颜色</button></view>
</template><script setup>import { ref } from 'vue'import variables from '../../utils/variables'const title = ref('hello uniapp vue3')const color = variables.primaryColorconst click = ()=> {uni.showModal({title:'请查看确认按钮为的颜色',confirmColor:color})}
</script><style lang="scss" scoped>.title {font-size: 36rpx;color: v-bind(color);}
</style>

最后的运行效果:

color: v-bind(variables.primaryColor);这样写会报错,把variables.primaryColor存在color变量里,const color = variables.primaryColor 然后color: v-bind(color);

最后的总结:

在js里使用css变量很难,但是在css里使用js变量就容易多了。

http://www.dtcms.com/a/524204.html

相关文章:

  • wordpress调用 别的网站昆明seo网站排名
  • 网站建设模板素材重庆互联网大厂
  • 网络爬虫指南:从原理到实战
  • 小杰-自然语言处理(four)——transformer系列——注意力机制
  • Java SpringAOP --- AOP的使用,AOP的源码
  • 阿里云渠道商:如何设置阿里云的安全组规则?
  • 网站设计速成如何让百度快速收录网站文章
  • 北京平台网站建设多少钱学院网站建设的特色
  • 外贸soho建站多少钱山东省住房和城乡建设厅官方网站
  • 芯科科技推出智能开发工具Simplicity Ecosystem软件开发套件开启物联网开发的新高度
  • 报错: lfstackPack redeclared in this block / go版本混乱,清理旧版本
  • 和鲸科技入选《大模型一体机产业图谱》,以一体机智驱科研、重塑教学
  • Go语言:关于怎么在线学习go语言的建议
  • 树 B树和B+树
  • 【arXiv2025】Real-Time Object Detection Meets DINOv3
  • 绍兴网站建设专业的公司4000-262-怎么在百度上发帖推广
  • AH2203输入12v输出3v 6v 9v/2A同步降压LED驱动器芯片
  • C如何调用Go
  • 使用Mathematica编写一个高效的Langevin方程求解器
  • 中国软件企业出海,为什么80%都选择这家服务商?
  • 《红黑树核心机制解析:C++ STL中map/set高效实现原理与工程实践》
  • Spring Boot 使用 Redis 实现消息队列
  • 从renderToString到hydrate,从0~1手写一个SSR框架
  • git报错no new changes、does not match any
  • 公司做网站的费用怎么做账望野作品
  • 【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(4)粗排算法模型多目标算法(Multi Task Learning)及目标融合
  • Prometheus 监控系统全维度指南
  • Gradle 增量构建与构建缓存:自定义 Task 如何实现 “只构建变化内容”?
  • 【笑脸惹桃花】1024,阶段性回望与小结
  • 农产品网站建设策划方案网站获取qq号码 代码